使用appium可以实现app自动化测试,我们之前是连接一台手机去运行,

如何同时连接多台手机呢?

很多人可能想到的是多线程(threading)。

今天分享一种比多线程更简单的方法,虽然不是多台手机同时运行,但可以连接多台手机依次运行。

大致的运行方式是:001号测试用例:A手机,B手机...,002号测试用例:A手机,B手机...

环境准备

◆ appium的安装:adt,nodejs,appium的python库,appium server

◆ pytest的安装:pytest

◆ allure的安装:allure的python库pytest-allure-adaptor

       

◆ jenkins上插件的安装

◆ jenkins的安装:windows上的安装

◆ 手机/模拟器:华为荣耀畅玩5C,夜神模拟器

一:

框架改造

配置改写,以上课所写的前程贷的自动化框架为主。

框架的分层如下:

在上述框架中,我们的配置信息存在Caps目录下的Caps.yaml中。

譬如这样:

这只是一台手机的设备信息和连接信息,

如果我们需要两台甚至多台,就需要把它们的信息都写入yaml文件,

每个手机的信息用一个列表描述。

注意:

01:上述yaml文件中多了deviceDesc和udid,前者是我们用来区分不同的手机,后者是appium用来区分不同的手机 

02: 给不同的手机设置不同的端口,荣耀畅玩5C使用的是4723,夜神模拟器使用的是4726

二:

Base Driver的改写

BaseDriver是公共的driver类,通过读取yaml配置信息,生成并返回driver对象。

其基本的传递路径是:

Caps.yaml-->BaseDriver.py-->conftest:设置不同的fixture,返回driver,

因此它是沟通配置信息和conftest的桥梁,

既然配置信息变了,相应的BaseDriver的读取也要改变,

改写前的BaseDriver.py,具体代码如下:

由于是多台手机,每个手机的通过配置信息里的deviceDesc来区分,

BaseDriver类中的base_driver函数需要设置一个变量device来区别不同的手机,

这个device是我们传入的,如果我们传入的是device="YeShen",还是用之前的代码的话,得到将是全部的信息。

有必要通过if判断筛选下,只取对应device的配置信息。

三:

conftest的改写

conftest是比较关键的一部,

因为它会调用BaseDriver()类中的base_driver()方法,

以往我们的conftest是这样定义的:

但是现在不同了,这个basedriver()函数中必须传入一个device的实参,

这个实参是从哪里获得的?

pytest的fixture为我们提供了一种参数化的操作,

fixture可以带入参数params,依赖于这个fixture的一套测试会根据参数的不同运行多次,

而被装饰函数中通过特殊的request对象来访问每个参数:request.param访问的是列表中的每个元素

四:

alllure的使用

allure可以设置不同的特性:

◆ allure.feature(功能点)

◆ allure.story(子功能点)

◆ with allure.step(步骤)

◆ allure.attach(附件)等

结合pytest,一个收集测试用例,一个生成测试报告。

现在通过allure在测试用例中给测试报告增加一些特性。

启动多个appium-server

之前有想过python代码执行appium命令的形式去自动启动appium服务,

但通过npm或cnpm安装appium命令行都有报错,只能手动启动。

很简单,打开两个appium客户端,一个设置端口为4723,一个4726,启动即可。

五:

配置jenkins任务

这方面的内容不做过多介绍,只看下构建和构建后的操作,

其中allure-results是pytest运行测试用例生成的xml报告所在的目录,

jenkins上的Allure Commandline插件会自动解析xml,生成对应的html报告

六:

allure测试报告

十分美观吧,右上角的TREND显示的是多次运行结果的趋势,

第7次到第19次都是5个fail,第20次6个fail

除此之外,allure报告的Behaviors功能中可以看到每个测试用例对应的测试步骤、功能、子功能等,

测试报告还会标记出同一个测试用例是哪台手机执行的,

如下图:

TestLogin.test_login_errorPasswd[Honor_5C]

代表的执行机是荣耀畅玩5C。

jenkins面板也展示了多次运行结果的趋势。

七:结语

pytest中fixture的参数化虽然能够实现多台手机同时连接,但是运行并不是同时的。

因为request.param读取参数列表是遍历读取的,

所以造成了一个测试用例,手机A先执行,手机B后执行(假设params=["手机A", "手机B"]),

要想真正做到多台手机同时运行,就要用到多线程。

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接免费拿走:
① 2000多本软件测试电子书(主流和经典的书籍应该都有了)
② 软件测试/自动化测试标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python编程语言、API接口自动化测试、web自动化测试、App自动化测试(适合小白学习)

⑤ Python学习路线图(告别不入流的学习) 
上图的资料 在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)
可以自助拿走,群号768747503备注(csdn999)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦

一定一定一定要备注暗号:CSDN999

————————————————

CSDN绝无仅有只此一篇:Appium+pytest+allure+jenkins如何实现多台手机连接详细教程教学相关推荐

  1. pytest allure测试报告_Appium+pytest+allure+jenkins如何实现多台手机连接

    很多人可能想到的是多线程(threading). 今天分享一种比多线程更简单的方法,虽然不是多台手机同时运行,但可以连接多台手机依次运行. 大致的运行方式是:001号测试用例:A手机,B手机...,0 ...

  2. Appium+Pytest+Allure集成PO项目管理模式实现自动化测试

    Appium+Pytest+Allure集成PO项目管理模式实现自动化测试 环境配置 Appium环境配置 Pytest环境配置 Allure环境配置 使用与集成 Appium使用 Pytest使用 ...

  3. pytest+Allure+jenkins

    目录 1.Allure简介 2.Pytest框架集成Allure 2.1 环境配置 2.2 生成html报告 2.3 定制报告 2.3.1 Features.Story定制详解 2.3.2 用例标题和 ...

  4. 最新出炉 全网最牛最新的pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化测试【超详细】从0到封装

    接口自动化测试框架(用例自动生成) 项目说明 本框架是一套基于pytest+requests+Python3.7+yaml+Allure+Jenkins+docker而设计的数据驱动接口自动化测试框架 ...

  5. 22.【终结篇】poco/airtest+pytest+allure+jenkins框架篇

    如果这些内容对你有帮助,也可以打开微信扫一扫,加关注: ​ 前几篇文章已分享了所有代码层相关内容,并提供了源码文件,接下来看下怎么和jenkins配合使用. 为了更方便获取框架源码,下面再汇总下前面几 ...

  6. Pytest+Allure+Jenkins接口自动化项目实战(一)

    经过一周多时间,基于python+pytest+excel+allure框架的接口自动化测试初版已基本实现,包括基本配置读取.用例读取.用例执行.sql读取执行.前置数据准备.后置数据清理以及测试报告 ...

  7. 【B站视频教程笔记】基于VSCode和CMake实现C/C++开发 | Linux篇(gcc/g++)(安装、配置、使用详细教程)(VSCode教程)(CMake教程)(精!)

    基于VSCode和CMake实现C/C++开发 | Linux篇 文章目录 目录结构 文件编辑 vim(编辑器之神,linux里可以畅通无阻,必学,但不是现在!) 安装GCC和GDB g++编译过程 ...

  8. python自动化框架pytest接口关联串联_python(pytest)+allure+jenkins 实现接口自动化的思路...

    ABZ理论 前言 身为著名的创业者+投资人,LinkedIn和Paypal的联合创始人Reid Hoffman有一个令我印象深刻的ABZ理论,他认为,你在任何时刻,手中都需要有三个计划:A计划.B计划 ...

  9. Android应用开发-小巫CSDN博客客户端UI篇

    Android应用开发-小巫CSDN博客客户端UI篇 上一篇是给童鞋们介绍整个项目的概况,从这篇博文开始,后续也会详细介绍整个客户端的开发,但不会贴很多代码,我会贴核心代码然后提供实现思路,想看里面更 ...

最新文章

  1. java common http_httpClient和common-httpclient的区别
  2. TS流的解码过程-ES-PES-DTS-PTS-PCR
  3. Access2007中如何运行SQL执行SQl语句
  4. web.config mysql_web.config配置mysql数据库连接
  5. Hibernate入门之关系篇:多对一和一对多映射
  6. WPF中TreeView.BringIntoView方法的替代方案
  7. layui复选框组件:如何操控隐藏域实现checked状态切换(含代码、案例、截图)
  8. UI设计素材|卡券界面设计
  9. flink Sql查询异常NoResourceAvailableException: Could not acquire the minimum required resources
  10. 【异常检测】Isolation forest 的spark 分布式实现
  11. Android通讯录(一)
  12. (售前)销售经理和产品经理的区别以及未来发展
  13. 修改版本名称及手机型号
  14. 无密码多重身份验证(MFA)2022年全球行业分析报告
  15. 五猴分桃问题的数学解
  16. matlab simulink 实现简单的脉宽调制PWM仿真
  17. spring cloud 2020.0.3 学习记录(四)配置中心config以及bus实现自动配置更新
  18. 多线程下载图片并压缩
  19. C语言中闭包的探究及比较
  20. 雄迈云服务器ip,中国版各大服务器ip 用于客户端登录

热门文章

  1. Win7系统提示Windows Defender无法扫描选定的文件解决方法
  2. vue组件销毁重置详解
  3. 情感与意志力之间的关系
  4. 编写一个函数mysum,以整数列表为参数,返回所以元素之和。
  5. 著作权、商标权、专利权的异同
  6. 什么是对象序列化?如何实现?什么情况下使用?
  7. 2019年下半年教师资格小学《综合素质》真题与参考答案
  8. oraclerman清理归档
  9. Rector模式和Proactor模式
  10. python遗传算法之单/多目标规划问题