AppiumLich
基于 Appium
, python3
, Allure
.测试 case 清晰明了,定位元素基于 pageobject
的模式,并自动生成 pageobject
的相关代码,封装Appium API
提供更加实用强大的 API.
源码地址: https://github.com/mio4kon/appium-lich
运行效果: http://mio4kon.qiniudn.com/case-2.gif
brew install python3
pip3 install <package>
npm install -g appium
npm install -g appium-doctor
appium-doctor
to ensure your system is set up properly
Allure Framework is a flexible lightweight multi-language test report tool with the possibility to add screenshots, logs and so on. It provides modular architecture and neat web reports with the ability to store attachments, steps, parameters and many more.
brew tap qatools/formulas
brew install allure-commandline
start appium service:
appium --address 127.0.0.1 --port 4723 --log "log_path" --log-timestamp --local-timezone --session-override
run test:
cd project_path
python3 run.py
Html-Report will be generate on project_path/report/html/index.html
report shot:
cd project_path
python3 watch_dog.py
打开 project_path/data/pages.yaml
,以下面模板定位元素:
---
LoginPage:
dec: 登录页面
locators:
-
name: 注册
timeOutInSeconds: 20
type: name
value: 注册
class TestLogin:
def test_login(self, action: ElementActions):
L.d('test_login')
account = Steps.get_account()
action.click(HomePage.登录入口)
action.text(LoginPage.账户, account[0])
action.text(LoginPage.密码, account[1])
action.sleep(1)
action.click(LoginPage.登录)
assert action.is_toast_show('欢迎回来')
楼主,你的博客打开实在太慢了。。挂在国外的吧?有机会可以把你的文章搬到社区来
@Mio4kon 请问这是什么用法 方法定义后面带->
谢谢
def get_environment_info(self) -> EnvironmentInfo:
env_path = self.config.env_yaml_path
with open(env_path, 'r') as f:
env_info = yaml.safe_load(f)
return env_info
好吊
学习一下
感谢分享
—— 来自 TesterHome 官方 安卓客户端
楼主是不是将所有页面的信息都写在 pages.yaml 吗?能不能提供详细点的说明,谢谢
@Mio4kon (Mio4kon)
请问楼主
命令无法执行的问题搞定了 现在就是怎么使用 allure 生成工具 生成报告呢 windows7 环境
提示 not found
@Mio4kon 楼主麻烦看下什么问题
要进入所在的目录文件夹,或者把全路径都写了 .
命令格式是:
allure generate <生成的xml路径>/ -o <要生成的html路径>
appium 服务器开了吗?
appium --address 127.0.0.1 --port 4723 --log "log_path" --log-timestamp --local-timezone --session-override
@Mio4kon 楼主,我使用了 allure generate <生成的 xml 路径>/ -o <要生成的 html 路径> 怎么生成的是一堆乱的文件
index.html 是一个空的模板页
用例多了之后怎么管理?
@Mio4kon 请教个问题
pytest.main(args) 这行代码进入那行代码首先执行?
管理元素还是用例?
用例多的话可以写多个 test 文件,把一些重复的过程封装到 Steps 中.还可以使用 Allure 的 severity, features 等注释将用例归类.
steps 相当于公用(通用)的操作了?能否再多介绍下 steps 在多用例中使用的思路?在写多个 tests 时候
并不是通用的才会定义 step.我会把一些常用的操作例如登录,注册,进入主页等会重复使用的放到一个单独的 Step 文件里.方便写用例. 而且测试报告也会很清楚.不会重复使用的也可以用 step 注释,只不过不会放到单独的文件了.目的只是看报告清楚.
还有比如一个功能可能有多个场景,可以用 features 和 stories 配合使用.
请教下一个用例有多个检查点时,用这个框架该怎么处理呢?
情况 1:检查点 A 和检查点 B 是前后顺序,A PASS 了才能继续 B
情况 2:检查点 A 和 B 是并行关系
如果检查点 A,检查点 B 放在一个 test_method 的话很简单.A ERROR 的话本身就不会执行 B.
如果放在两个 test_method 的话要用到 pytest 的 xfail.
文档可以看
https://docs.pytest.org/en/latest/skipping.html
例子:
http://stackoverflow.com/questions/12411431/pytest-how-to-skip-the-rest-of-tests-in-the-class-if-one-has-failed
并行关系的话我都放在两个 test_method 处理的.或者你可举一个具体的例子.
@Mio4kon 'automationName': 'UIAutomator2', 这个对 andriod 版本有要求吧 我在 4.3 版本下运行 webdriver 起不来
有个疑惑请教下,
test_home.py 下的 test_login 用例的失败会不会一直占着 appium 的 session 不释放?
test_home.py 的执行失败会不会影响到另外的 test_me.py?
1.和成功失败没关系.我写的例子用的是 action,域是"module".所有同一"module"下不会释放,如果希望每个 method 都释放可以用 action2
2.不会
可以分多个 pagexx.yaml 吗 ? 如果把所有页面元素都写在 pages.yaml 下 不方便分类维护吧
click 报什么错? 我试了下 4.3 版本 click 没问题,只是 Toast 不能用这种方式验证了.
Toast 是在 Appium 1.6.3 Releases 中加入的
Android - Uiautomator2
Add ability to verify TOAST messages (these can't be interacted with, only
text retrieval allowed)
分多个 page.yaml 有在做考虑
brew install allure-commandline 一直报错 “curl: (7) Failed to connect to github-cloud.s3.amazonaws.com port 443: Operation timed out”,重试了 N 次都没装上,楼主是怎么装上的额?
brew install allure-commandline
Updating Homebrew...
==> Installing allure-commandline from qatools/formulas
==> Downloading https://github.com/allure-framework/allure-core/releases/downloa
######################################################################## 100.0%
curl: (7) Failed to connect to github-cloud.s3.amazonaws.com port 443: Operation timed out
Error: Failed to download resource "allure-commandline"
Download failed: https://github.com/allure-framework/allure-core/releases/download/allure-core-1.4.23/allure-commandline.zip
现在最新代码支持拆分pages.yaml
了.
你那个找不到 text 的问题估计是selenium
版本的问题.建议装3.0.2
版本.具体见我的博客里提到:
应该是国内连不上亚马逊的服务器,换一下 homebrew 的镜像源吧
有点强势啊,膜拜。
我也是空白页,求助~~
直接运行 test_home.py,报错的,楼主能解决下吗?
======================================================================
Traceback (most recent call last):
File "C:\Program Files\Python35\lib\site-packages\nose\case.py", line 198, in runTest
self.test(*self.arg)
TypeError: test_login() missing 1 required positional argument: 'action'
Ran 1 test in 0.002s
@Mio4kon win7 下安装 Allure Commandline(allure1-1.5.4\allure-commandline\src\main\scripts\allure.bat),提示 “此时不应有 \Java\jdk1.8.0_112”。将 allure.bat 中的% 修改成%% 后再执行,无响应。不知该如何解决?
刚写楼主分享 刚刚打算入职新公司,是做 app 测试的,而且十分幸运也是要求用 python 写测试。
请问,现在国内用 python 写测试的多么,通常是哪个版本的 python 比较多?另外 python3 在你的这个例子里面是不是必须的?
谢谢啦
@Mio4kon 我是在 win7 下载 zip 包(GitHub)安装出现上述问题的,也不知是文档还是文件原因,总之折腾了一段时间未能解决(无论是 Allure1 还是 Allure2,LZ 教程中提供的链接是 Allure1)。今天改用 Scoop 包管理方式才装上 Allure。方法如下:
scoop install allure
@bulecat @xiaocong168 @huangxiaojiao 我也遇到 Allure 空白页问题(打开 xml 有内容),试过 Chrome、FF、IE 等浏览器,只有 FF 能正常打开,不清楚是不是浏览器兼容问题。
框架里写到运行 watch_dog,对 yaml 文件做了改动并且保存的话,page.py 会自动生成代码,试了下没反应。所以目前还是自己手动去吧页面信息输入到 page.py 中。。是哪里的问题呢?
还有,allure 可以做到失败页面截图么?我看到 report 中 log 很详细,但是好像没有截图
空白页的原因是因为报告用到了 ajax 本地请求,不支持 file 协议.建议报告集成到 Jenkins 或者使用 chrome 的插件web server
. 还有一种方法就是利用pychram
IDE 右键 html 文件open in browser
空白页的原因是因为报告用到了 ajax 本地请求,不支持 file 协议.建议报告集成到 Jenkins 或者使用 chrome 的插件 web server. 还有一种方法就是利用 pychram IDE 右键 html 文件 open in browser
Allure1 有很多方式可以装.比如 npm 可以用下面这种,改下版本号.
现在框架已经改成 Allure2 了.不过代码还没有提交.
npm install -g allure-commandline@2.0.1 --save-dev
整个项目过了一遍,楼主很赞。
个人感觉对报告的后续发送处理加上就更好,如把报告的概要(版本、时间、通过项数)通过 post http 发送出去(例如微信公众号 api),这样闭环之后,在实际工作使用中更好点。
你的 TODO 干的怎么样?
现在就是用的你那个框架做手机 UI 自动化,case 可以顺利的跑,也遇到几个问题。
我运行出来是这样的,求助啊,各位大神
我第一次跑 report 就可以打开的啊,难道是因为用的 pycharm 的关系?反正我去文件夹里面直接双击 index.html 也能看到完整报告。
上面 Mio4kon 不是回复说:“空白页的原因是因为报告用到了 ajax 本地请求,不支持 file 协议.建议报告集成到 Jenkins 或者使用 chrome 的插件 web server. 还有一种方法就是利用 pychram IDE 右键 html 文件 open in browser”,你试试呗
楼主问个问题,就是用 uiautomaterviewer 定位的时候,针对 NAF 的节点怎么定位呢?这些控件是不被 Uiautomator 工具识别
楼主,我这边执行时 self.appium_v = Shell.invoke('appium -v').splitlines()[0].strip(),Shell.invoke('appium -v') 获取的总是空,导致报错,求解~
..
小白看不懂 utils 目录下的代码···就大佬讲解下。
utils-shell self.adb('get-serialno').stdout.read()strip()
我一直报错,self.adb('get-serialno')
这段返回是一个字符串,studout
方法不是文本嘛,所以一直报错'str' object has no attribute 'stdout'
···求解惑