51Testing软件测试论坛

标题: [开源分享] 基于 Appium-python3 的移动自动化测试框架 AppiumLich,附相关系列教程 [打印本页]

作者: 巴黎的灯光下    时间: 2017-6-30 14:37
标题: [开源分享] 基于 Appium-python3 的移动自动化测试框架 AppiumLich,附相关系列教程
本帖最后由 巴黎的灯光下 于 2017-6-30 14:39 编辑

简介

AppiumLich 基于 Appium, python3, Allure.测试case清晰明了,定位元素基于 pageobject的模式,并自动生成 pageobject的相关代码,封装Appium API提供更加实用强大的API.


Link

下面附上几篇学习的系统教程,非常适合新手入门.最后两篇是基于AppiumLich框架的实践.

移动端自动化测试系列之一——Appium环境搭建:http://bbs.51testing.com/thread-1132119-1-1.html

移动端自动化测试系列之二——pytest入门详解:http://bbs.51testing.com/thread-1132120-1-1.html

移动端自动化测试系列之三——Allure测试报告:http://bbs.51testing.com/thread-1132122-1-1.html

移动端自动化测试系列之四——生成定位元素:http://bbs.51testing.com/thread-1132123-1-1.html

移动端自动化测试系列之五——AppiumLich框架使用:http://bbs.51testing.com/thread-1132125-1-1.html

环境要求


Python3:
  1. brew install python3
复制代码
Python3 Package
  1. pip3 install <package>
复制代码
.Appium-Python-Client
.Jinja2
.PyYAML
.pytest
.pytest-allure-adaptor
.watchdog
.termcolor (not needed)

Appium
  1. npm install -g appium
  2. npm install -g appium-doctor
复制代码
  1. appium-doctor to ensure your system is set up properly
复制代码

Allure-Commandline

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


Run Test

start appium service:
  1. appium --address 127.0.0.1 --port 4723 --log "log_path" --log-timestamp --local-timezone --session-override
复制代码
run test,
  1. cd project_path
  2. python3 run.py
复制代码
Html-Report will be generate on project_path/report/html/index.html

report shot:


Write Test Case

开启watchdog
  1. cd project_path
  2. python3 watch_dog.py
复制代码
  1. 打开 project_path/data/pages.yaml,以下面模板定位元素:
复制代码
  1. ---
  2. LoginPage:
  3.   dec: 登录页面
  4.   locators:
  5.     -
  6.       name: 注册
  7.       timeOutInSeconds: 20
  8.       type: name
  9.       value: 注册
复制代码

写测试case

  1. class TestLogin:
  2.     def test_login(self, action: ElementActions):
  3.         L.d('test_login')
  4.         account = Steps.get_account()
  5.         action.click(HomePage.登录入口)
  6.         action.text(LoginPage.账户, account[0])
  7.         action.text(LoginPage.密码, account[1])
  8.         action.sleep(1)
  9.         action.click(LoginPage.登录)
  10.         assert action.is_toast_show('欢迎回来')
复制代码

TODO


兼容iOS
集成 stf

作者: Real_小T    时间: 2017-6-30 16:08
干货!顶!
作者: 悠悠小仙仙    时间: 2017-6-30 16:34
请问这是什么用法 方法定义后面带->
谢谢
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
作者: 草帽路飞UU    时间: 2017-6-30 16:35
请教下一个用例有多个检查点时,用这个框架该怎么处理呢?
情况1:检查点A和检查点B是前后顺序,A PASS了才能继续B
情况2:检查点A和B是并行关系
作者: 巴黎的灯光下    时间: 2017-6-30 16:36
草帽路飞UU 发表于 2017-6-30 16:35
请教下一个用例有多个检查点时,用这个框架该怎么处理呢?
情况1:检查点A和检查点B是前后顺序,A PASS了 ...

如果检查点A,检查点B放在一个test_method的话很简单.A ERROR的话本身就不会执行B.
如果放在两个test_method的话要用到pytest的xfail.
作者: 乐哈哈yoyo    时间: 2017-6-30 16:36
可以分多个pagexx.yaml吗 ? 如果把所有页面元素都写在pages.yaml下 不方便分类维护吧
作者: 小皮球的故事    时间: 2017-6-30 16:37
整个项目过了一遍,楼主很赞。
个人感觉对报告的后续发送处理加上就更好,如把报告的概要(版本、时间、通过项数)通过post http发送出去(例如微信公众号api),这样闭环之后,在实际工作使用中更好点。
作者: 51sheng    时间: 2018-8-8 14:21
源码在哪里啊?




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2