pyest+appium实现APP自动化测试,思路全总结在这里

news/2024/11/24 5:39:09/

目录

01、appium环境搭建

2、搭建python+pytest+appium环境

3、安装pycharm搭建项目编写脚本

4、执行测试

绵薄之力


01、appium环境搭建

  • 安装nodejs

http://nodejs.cn/

为什么要安装nodejs?

因为appium这个工具的服务端是由nodejs语言开发的

  • 安装jdk,并且配置环境变量

为什么要装jdk?

因为我们要测试安卓,那么安卓的调试环境需要依赖jdk

  • 安装sdk,并配置环境变量

为什么要装sdk?

因为我们要测试安卓,sdk就是安卓开发调试的环境

  • 安装appium服务端

1. 命令行形式的appium server

npm install appium@1.15.1

2. appium desktop版本,在官网下载即可

3. 上述两种之间的区别

桌面版不仅仅是一个appium server,他还包括了元素定位调试以及录制脚本的功能

命令行版本仅仅是一个appium server

  • 安装appium-doctor

npm install appium-doctor

这个工具是用来检查appium的环境的,但是注意并不是说在这里检查没有错误就能代表我的环境一定没有问题

  • 安装安卓模拟器(并不是必须)

夜神、mumu,等等

 

2、搭建python+pytest+appium环境

  • 安装python

  • 安装pytest

pip install pytest

  • 安装selenium

pip install selenium

  • 安装appium

pip install Appium-Python-Client

  • 安装allure-pytest

pip install allure-pytest

3、安装pycharm搭建项目编写脚本

  •  初始化driver代码编写

# !/usr/bin python3                        # encoding: utf-8 -*-                        # @author: 沙陌 微信:Matongxue_2# @Time: 2021/5/21 10:25# @Copyright:北京码同学网络科技有限公司#移动端初始化用到的参数特别多#下面的这个字典里的参数是脚本告诉appium服务端我都要干什么,基础的能力参数import timeimport allurefrom appium import webdriverfrom selenium.webdriver.common.by import Bydesired_caps = {#这表示你要测试的设备类型,安卓就写android,ios就写ios'platformName':'android',#这表示你要测试的app的路径'app':'C:\\Users\\lixio\\Desktop\\douban.apk',#看起来像是设备名称,但是注意在安卓上这个位置的值随便写都行,#这个并不能够代表你要执行的设备是哪个'deviceName':'xxx',#这个参数才是真正的指定执行哪台设备的参数,# 他的值写的就是使用adb devices命令看到的设备名称'udid':'127.0.0.1:62001',#该参数非常重要,表示在执行测试时不重签名apk文件,# 默认情况下appium会针对apk文件进行重签名操作,# 但是现在的app都有签名篡改的校验,如果被重签名了那么这个app就不能正常使用了'noSign':True,#该参数表示在执行appium测试时使用appium的辅助输入法,# 好处是支持中文输入支持键盘隐藏'unicodeKeyboard':True,#表示执行完测试之后将手机的输入法重置回手机原来的'resetKeyboard':True,#表示脚本和appium服务之间连接的session超时时间,单位是秒'newCommandTimeout':600}# 初始化driver,参数里看到的url就是appium服务的地址 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)#增加隐式等待driver.implicitly_wait(10) #单位是秒```
  • 元素查看

可以使用sdk自带的uiautomatorviewer.bat这个工具,也可以使用appium desktop版本的元素查看

  • 豆瓣登录脚本编写,采用pytest方式

@allure.title('豆瓣登录')def test_login():# id定位在安卓端对应的元素属性是resource-iddriver.find_element(By.ID,'com.douban.frodo:id/left').click()driver.find_element(By.ID,'com.douban.frodo:id/input_user_name').send_keys('18729399607')driver.find_element(By.ID,'com.douban.frodo:id/input_password').send_keys('abc123456')driver.find_element(By.ID,'com.douban.frodo:id/sign_in_douban').click()#操作完成后,必须有断言来判断结果是否正常time.sleep(3)page_source = driver.page_sourceassert '书影音' in page_source

4、执行测试

  • 执行前准备工作

1. 启动appium服务,在命令行做如下操作

2. 确保手机设备连接正常

  • 执行测试

在pycharm的Terminal中执行如下命令

pytest -sv --alluredir ./report/allure-results --clean-alluredir

  • 生成allure测试报告

allure generate ./report/allure-results -o ./report/allure-report --clean


绵薄之力

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…


http://www.ppmy.cn/news/47406.html

相关文章

Nginx+Tomcat负载均衡、动静分离

1.Tomcat多实例部署 Tomcat的多实例部署简单的讲就是基于端口的虚拟主机设置 步骤一:安装jdk (1)关闭防火墙和selinux,防止其对安装过程的干扰 (2)将准备好的软件包拖入/opt目录下,进行安装 #某rpm包尚未…

“C语言之美:结构体、联合体和枚举的魔法“

目录 结构体 联合体 枚举 结构体 结构体是一种用户定义的数据类型,它允许我们将不同类型的数据组合在一起,形成一个单独的实体。结构体由多个元素(也称为成员)组成,并且每个元素可以是不同的数据类型,例…

ServletConfig和ServletContext 的介绍和代码实现

目录 ServletConfig ServletConfig 基本介绍 ServletConfig 类能干什么 为什么需要 ServletContext 1. 方案 1-DB 2. 方案 2-ServletCntext 代码实战 ServletContext ServletContext 基本介绍 ServletContext 可以做什么 代码实战 代码实战2 ServletConfig Servle…

netlink

Netlink套接字是用以实现内核进程和用户进程通信的一种特殊的进程间通信(IPC),从linux 2.2开始引入内核,当时名为AF_NETLINK,旨在提供一种更灵活的内核和用户空间的通信方法,用以替换笨拙的IOCTL. IOCTL 方式通信&…

dockerFile记录

后端打包dockerFile内容 FROM openjdk:8-alpine RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo Asia/Shanghai > /etc/timezone ENV projectName operation RUN mkdir -p /home/${projectName} WORKDIR /home/${projectName} COPY ./ /home/${pro…

「OceanBase 4.1 体验」|国产分布式数据库不好用?别再打脸了

文章目录 分布式数据库分布式数据库有哪些?OceanBase4.1安装部署Index Skip Scan总结 随着互联网的高速发展和数据量的爆炸式增长,如何能够高效、可靠、安全地存储海量数据成为了每个企业的重要课题。 分布式数据库 分布式数据库通常是由多个独立的数据…

从底层理解类

函数调用约定_thiscall thiscall是对象调用类成员函数时的约定 class Role { public:int hp;int mp;int add(int a, int b){return hp mp a b;} }; int main() {Role r;r.add(100, 200); } 查看汇编代码 15: Role r;16: r.add(100, 200); 00F91B08 push 0C…

[网络安全]第三次作业

目录 1. 什么是IDS? 2. IDS和防火墙有什么不同? 3. IDS工作原理? 4. IDS的主要检测方法有哪些详细说明? 5. IDS的部署方式有哪些? 6. IDS的签名是什么意思?签名过滤器有什么作用?例外签名…