当前位置: 首页 > news >正文

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

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

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

  • 初始化driver代码编写
# !/usr/bin python3                        
# encoding: utf-8 -*-                        
# @author: 沙陌 微信:Matongxue_2
# @Time: 2021/5/21 10:25
# @Copyright:北京码同学网络科技有限公司#移动端初始化用到的参数特别多
#下面的这个字典里的参数是脚本告诉appium服务端我都要干什么,基础的能力参数
import time
import allure
from appium import webdriver
from selenium.webdriver.common.by import By
desired_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

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

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:

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

01、appium环境搭建 安装nodejs http://nodejs.cn/ 为什么要安装nodejs? 因为appium这个工具的服务端是由nodejs语言开发的 安装jdk,并且配置环境变量 为什么要装jdk? 因为我们要测试安卓,那么安卓的调试环境需要依赖jdk …...

ES6 Set数据结构

1.Set 是什么 Set是新的引用型的数据结构 它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成 Set 数据结构。 Set函数可以接受一个数组作为参数,用来初始化。 2.Set特性(重点概…...

Semaphore(信号量)

信号量就是通过AQS的共享锁机制来实现的。这个类总体比较简单,就不做过多描述。 Sync同步器 abstract static class Sync extends AbstractQueuedSynchronizer {private static final long serialVersionUID 1192457210091910933L;//初始化permits许可数&#xf…...

InnoDB 与 MyISAM的比较(含其他存储引擎)

文章目录 什么是搜索引擎MyISAMInnoDB比较表格 MySQL从3.23.34a开始就包含InnoDB存储引擎。 大于等于5.5之后,默认采用InnoDB引擎 。 什么是搜索引擎 MySQL的存储引擎是用于管理数据的底层系统组件,它定义了数据如何存储、检索和管理。不同的存储引擎提…...

系统韧性研究(2)|系统韧性如何关联其他质量属性?

对大多数人来说,如果一个系统在逆境中继续执行它的任务,那么它会被认为具有韧性。换句话说,尽管过度的压力或多或少都会导致系统中断,但如果系统依然能够正常运行并提供所需的能力,则可认为该系统具备韧性。 系统韧性…...

电脑桌面记事本便签软件哪个好?

很多人的电脑或者手机上都离不开一款好用的便签软件,使用便签软件可以帮助大家记事,提醒大家按时完成各项任务,但是自带的记事本便签软件不论从外观还是功能方面都有一定的欠缺,在使用过程中很容易耽误事情。 功能全面外观好看的…...

可视化(Visual) SQL初探

一、背景 在当今数字化时代,数据信息作为企业和组织的宝贵资源之一,如何挖掘其中的价值并帮助企业和组织个体决策,已然成为炙手可热的话题。数据分析作为其具体载体,是从数据中提取信息、洞察机遇、制定战略、做出决策的关键过程…...

多目标权重融合方式

1. 多目标学习在推荐系统的应用(MMOE/ESMM/PLE) - 知乎 ## combine loss ctr_log_var tf.get_variable(namectr_log_var,dtypetf.float32,shape(1,),initializertf.zeros_initializer() ) ysl_log_var tf.get_variable(nameysl_log_var,dtypetf.float32,shape(1,),initializ…...

软件工程与计算总结(二十)软件交付

软件交付是软件项目的结束阶段 ,标志着软件开发任务的完成——其作为一个分水岭,区分了软件开发与软件维护两个既连续又不同的软件产品生存状态~ 在经历连续的辛苦工作之后,开发人员在胜利曙光之前难免会忽视软件交付阶段的一些工作——在准…...

02 开闭原则

官方定义: 开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修 改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保 软件系统开发和维护过程的可靠性。 通俗解释: 对扩展开放…...

LamdaUpdateWapper失效问题

因为入参是json的文本格式,结果ID多输入了一个空格直接修改返回条数为0。 比如ID入参在swagger中或前端入参:“412210293355454”,结果不小心为“ 412210293355454”, 而且几乎看不出来这个空格。 记住:事出原因必有妖…...

“权限之舞:Linux安全之道”

W...Y的主页😊 代码仓库分享💕 🍔前言: 在之前的Linux博客中,我们学习了基础的Linux指令,具体可以订阅一下博主的Linux专栏学习。当我们想进行递归删除文件时等等许多操作中,只有在root账号中…...

Visual Studio Code官网下载、vscode下载很慢、vscode下载不了 解决方案

前言 开发界的小伙伴们对于Visual Studio Code开发环境来可以说非常熟悉了,但由于在Visual Studio Code官网的下载速度非常的慢,即便开了代理也是一样的很慢、甚至下载被中断,几乎不能下载。 解决方案 1、在Web浏览器上打开vscode官网&#…...

URL、域名和网址的区别

网址、域名和URL 都用于描述在互联网上定位资源的标识符,通常它们可以互换使用,但严格来说有区别: URL(Uniform Resource Locator):URL是统一资源定位符的缩写,它是一个包含地址信息的完整字符串…...

【oceanbase】centos7/kylinv10部署oceanbase(x86版本)

1. 修改系统​ vim /etc/sysctl.conf fs.file-max 102400 net.nf_conntrack_max 1024000 net.netfilter.nf_conntrack_max 1024000 2. 修改 ulimit 的 open file,系统默认的 ulimit 对文件打开数量的限制是 1024 vim /etc/security/limits.conf # 加入以下…...

论文导读 | 支持事务与图分析的图存储系统

事务系统保证了系统的数据一致性,确保事务更新的原子性或是不同事务之间的数据隔离性等在多线程并发环境下所必不可少的ACID特性。而在今天快速变化的商业环境下,诸如物流和供应链,金融风控和欺诈检测等场景都需要图分析系统提供对数据动态更…...

Vue3最佳实践 第八章 ESLint 与 测试 ( ESLint )

ESLint ​在所有的JavaScript 项目开发中我们都会接触到 ESLint 这个词,ESLint 是个什么样的组件会给为项目做些什么吗?ESLint 是一种检查语法错误以及代码是否按照预定规则编写的工具。ESLint 可以帮助开发者发现代码中潜在的错误。在Vue项目中Eslint一…...

【C++】命名空间和using namespace std的注意事项

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...

修改51单片机中数组元素的值

在8051单片机中,code关键字用于将数据存储在ROM中。由于ROM是只读的,所以在运行时无法直接修改seven_seg数组中的值。 如果您想在main函数中修改seven_seg[1]的值为0xc0,您可以将seven_seg数组定义为可写的变量,而不是存储在ROM中…...

Ruby和面向对象技术

Ruby和许多极为流行的编程语言都是面向对象的。多数的面向对象编程语言,每个对象都是一个样例或者既定类的实例以及独立对象的行为。 一、创建一个通用对象 创建一个通用对象 obj Object.new定义通用对象的行为 def obj.talk puts "I am an object"p…...

C++11常用新特性——可变参数模板

可变参数模板 C11中,可变参数模板是一个非常强大的特性,它允许函数和类模板接受任意数量和类型的参数,这为类型的安全编程提供了更广泛的灵活性。下面我将详细介绍这一新特性。 基础概念: 可变参数模板允许你传递多个类型和数量…...

SpringCloud-Seata

一、介绍 (1)实现分布式事务 (2)解决Spring只支持单机事务 (3)事务ID TC(事务协调者) TM(事务管理者) RM(资源管理者)...

java击球小游戏运行代码

创建一个图形化的小游戏通常需要使用Java图形库,例如Swing或JavaFX。下面是一个使用JavaFX创建的简单的图形化小游戏示例,其中一个小球会在窗口内移动,你需要点击小球以增加得分: import javafx.application.Application; import…...

Hadoop面试题+详解

20道面试题及详细解答! 1.说说什么是结构化数据、非结构化数据和半结构化数据 结构化数据、非结构化数据和半结构化数据是根据数据的组织结构和格式来划分的不同类型的数据。 结构化数据:结构化数据是按照预定义的数据模型进行组织和存储的数据。它通常…...

PDF编辑阅读:Acrobat Pro DC 2021中文稳定版

Acrobat Pro DC 2021是一款专业的PDF编辑和阅读软件。它可以创建、编辑、组合、签署和分享PDF文件,提供了许多强大的功能,如PDF文件转换、OCR识别、PDF文件合并、加密和解密等等。Acrobat Pro DC 2021的界面简单直观,易于使用,而且…...

单词规律(C++解法)

题目 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 输入: pattern "abba", s …...

MySQL 主从复制原理

文章目录 1.主从复制方式1.1 异步复制1.2 半同步复制1.3 全同步复制 2.主从复制原理3.主从复制时推还是拉?参考文献 主从复制是 MySQL 高可用(备份)和高性能(读写分离)的基础,有了这个基础,MySQ…...

构建嵌入式Linux rootfs根文件系统

创建根文件系统涉及选择系统运行所需的文件。在本节中,我们将介绍如何构建压缩的根文件系统。不太常见的选择是在直接作为 root 挂载的本地驱动器上构建未压缩的文件系统。 转载请注明来源,谢谢。构建嵌入式Linux rootfs根文件系统-CSDN博客创建根文件系…...

高速电路设计----第三章

一、数字信号需要上拉的情况 1、 一般信号上拉接多大的电阻要看对于芯片的电流要求。看芯片datasheet的I(BHLO)和I(BHHO)两个参数。平时的话: 3.3V的上拉为1K~3.3k即可 5V的上拉电阻为4.7K到10K即可。 2、数字信号的逻辑控制&a…...

【微信小程序】6天精准入门(第4天:自定义组件及案例界面)附源码

一、自定义组件 1、介绍 从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。 开发者可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中重复使用;也可以将复杂的页…...