51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 4075|回复: 7
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-6-30 14:37:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 巴黎的灯光下 于 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

评分

参与人数 1测试积点 +10 收起 理由
lsekfe + 10 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3
回复

使用道具 举报

该用户从未签到

3#
发表于 2017-6-30 16:34:36 | 只看该作者
请问这是什么用法 方法定义后面带->
谢谢
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
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2017-6-30 16:35:30 | 只看该作者
请教下一个用例有多个检查点时,用这个框架该怎么处理呢?
情况1:检查点A和检查点B是前后顺序,A PASS了才能继续B
情况2:检查点A和B是并行关系
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2017-6-30 16:36:00 | 只看该作者
草帽路飞UU 发表于 2017-6-30 16:35
请教下一个用例有多个检查点时,用这个框架该怎么处理呢?
情况1:检查点A和检查点B是前后顺序,A PASS了 ...

如果检查点A,检查点B放在一个test_method的话很简单.A ERROR的话本身就不会执行B.
如果放在两个test_method的话要用到pytest的xfail.
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2017-6-30 16:36:39 | 只看该作者
可以分多个pagexx.yaml吗 ? 如果把所有页面元素都写在pages.yaml下 不方便分类维护吧
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2017-6-30 16:37:40 | 只看该作者
整个项目过了一遍,楼主很赞。
个人感觉对报告的后续发送处理加上就更好,如把报告的概要(版本、时间、通过项数)通过post http发送出去(例如微信公众号api),这样闭环之后,在实际工作使用中更好点。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2018-8-8 11:08
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    8#
    发表于 2018-8-8 14:21:00 | 只看该作者
    源码在哪里啊?
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-20 01:19 , Processed in 0.068036 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表