APP自动化测试-Python+Appium+Pytest+Allure框架实战封装(详细)

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

pytest只是单独的一个单元测试框架,要完成app测试自动化需要把pytest和appium进行整合,同时利用allure完成测试报告的产出。

编写常规的线性脚本具体的步骤如下:
1、设计待测试APP的自动化测试用例
2、新建app测试项目
3、配置conftest.py文件等
4、编写整体app测试用例运行文件
5、把设计好的自动化测试用例转化成脚本备注

以下示例采用计算器为示例

前置条件:下载第三方库
下载 appium-python-client
下载 pytest
下载 allure-pytest

1、设计待测试APP的自动化测试用例

E1

2、新建APP测试项目

E2

3、配置文件信息

先配置外层conftest.py文件

import pytest# 配置app的各种连接信息
@pytest.fixture(scope='session')
def android_setting():des = {'automationName': 'appium','platformName': 'Android','platformVersion': '6.0.1',  # 填写android虚拟机/真机的系统版本号'deviceName': 'MuMu',  # 填写安卓虚拟机/真机的设备名称'appPackage': 'com.sky.jisuanji',  # 填写被测app包名'appActivity': '.JisuanjizixieActivity',  # 填写被测app的入口'udid': '127.0.0.1:7555',  # 填写通过命令行 adb devices 查看到的udid'noReset': True,  # 是否重置APP'noSign': True,  # 是否不签名'unicodeKeyboard': True,  # 是否支持中文输入'resetKeyboard': True,  # 是否支持重置键盘'newCommandTimeout': 30  # 30秒没发送新命令就断开连接}return des

再配置用例层的conftest.py文件

import time
import pytest
from appium import webdriverdriver = None
# 启动安卓系统中的计算器app
@pytest.fixture()
def start_app(android_setting):global driverdriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',android_setting)return driver# 关闭安卓系统中的计算器app
@pytest.fixture()
def close_app():yield drivertime.sleep(2)driver.close_app()

配置pytest.ini文件进行分组设置

E3

4、编写run_all_cases.py测试执行入口文件

import os
import pytest# 当前路径(使用 abspath 方法可通过dos窗口执行)
current_path = os.path.dirname(os.path.abspath(__file__))
# json报告路径
json_report_path = os.path.join(current_path,'report/json')
# html报告路径
html_report_path = os.path.join(current_path,'report/html')# 执行pytest下的用例并生成json文件
pytest.main(['-s','-v','--alluredir=%s'%json_report_path,'--clean-alluredir'])
# 把json文件转成html报告
os.system('allure generate %s -o %s --clean'%(json_report_path,html_report_path))

5、编写测试用例

在testcases层下有两个业务子模块 test_add_sub_module 和 test_mul_div_module;

test_add_sub_module模块下test_add.py文件
代码如下:

import allure
from appium.webdriver.webdriver import By@allure.epic('安卓计算机项目')
@allure.feature('V1.0版本')
class TestAddSub():@allure.story('加法运算')@allure.title('[case01] 验证计算机能否正常完成加法功能')# @pytest.mark.add_basicdef test_cases01(self,start_app,close_app):with allure.step('1、启动安卓系统中的计算机app'):driver = start_appwith allure.step('2、依次按下9、+、8、='):driver.find_element(By.XPATH,'//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn9"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/jia"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn8"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/denyu"]').click()actual_result = driver.find_element(By.XPATH, '//android.widget.EditText[@resource-id="com.sky.jisuanji:id/text"]').textwith allure.step('3、验证实际结果是否正确'):# 断言 实际结果 == 17.0assert actual_result == '17.0'

test_add_sub_module模块下test_sub.py文件
代码如下:

import allure
from appium.webdriver.webdriver import By@allure.epic('安卓计算机项目')
@allure.feature('V1.0版本')
class TestAddSub():@allure.story('减法运算')@allure.title('[case01] 验证计算机能否正常完成减法功能')def test_cases01(self,start_app,close_app):with allure.step('1、启动安卓系统中的计算机app'):driver = start_appwith allure.step('2、依次按下6、-、2、='):driver.find_element(By.XPATH,'//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn6"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/jian"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn2"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/denyu"]').click()actual_result = driver.find_element(By.XPATH, '//android.widget.EditText[@resource-id="com.sky.jisuanji:id/text"]').textwith allure.step('3、验证实际结果是否正确'):# 断言 实际结果 == 4.0assert actual_result == '4.0'

test_mul_div_module模块下test_mul.py文件
代码如下:

import allure
from appium.webdriver.webdriver import By@allure.epic('安卓计算机项目')
@allure.feature('V1.0版本')
class TestAddSub():@allure.story('乘法运算')@allure.title('[case01] 验证计算机能否正常完成乘法功能')def test_cases01(self,start_app,close_app):with allure.step('1、启动安卓系统中的计算机app'):driver = start_appwith allure.step('2、依次按下3、*、4、='):driver.find_element(By.XPATH,'//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn3"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/chen"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn4"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/denyu"]').click()actual_result = driver.find_element(By.XPATH, '//android.widget.EditText[@resource-id="com.sky.jisuanji:id/text"]').textwith allure.step('3、验证实际结果是否正确'):# 断言 实际结果 == 12.0assert actual_result == '12.0'

test_mul_div_module模块下test_div.py文件
代码如下:

import allure
from appium.webdriver.webdriver import By@allure.epic('安卓计算机项目')
@allure.feature('V1.0版本')
class TestAddSub():@allure.story('除法运算')@allure.title('[case01] 验证计算机能否正常完成除法功能')def test_cases01(self,start_app,close_app):with allure.step('1、启动安卓系统中的计算机app'):driver = start_appwith allure.step('2、依次按下8、*、4、='):driver.find_element(By.XPATH,'//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn8"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/chu"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn4"]').click()driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/denyu"]').click()actual_result = driver.find_element(By.XPATH, '//android.widget.EditText[@resource-id="com.sky.jisuanji:id/text"]').textwith allure.step('3、验证实际结果是否正确'):# 断言 实际结果 == 2.0assert actual_result == '2.0'

6、运行结果生成测试报告

E4

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

梦想是风帆,奋斗是航船,只有不断追逐才能抵达成功的彼岸。踏浪前行,勇往直前,拼尽全力,终将扬起胜利的风帆。坚信自己,勇敢闯荡,你必能驶向辉煌,书写属于自己的壮丽篇章。

人生犹如攀登高峰之路,越是陡峭的山势,越显我们的勇气。跨越困难,超越自我,拼搏奋斗铸就辉煌。不忘初心,砥砺前行,坚定信念,你必能征服一切,创造属于自己的辉煌人生。

命运的舞台属于勇敢者,每一次努力都是改变的契机。放飞心灵,砥砺前行,只有奋斗才能创造无限可能。相信自己的力量,坚持不懈,你将开启一段辉煌的征程,书写属于自己的壮丽传奇。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/73703.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人驾驶实战-第五课(动态环境感知与3D检测算法)

激光雷达的分类: 机械式Lidar:TOF、N个独立激光单元、旋转产生360度视场 MEMS式Lidar:不旋转 激光雷达的输出是点云,点云数据特点: 简单:x y z i (i为信号强度) 稀疏:7%&…

【工具】自动搜索Research网站的学术会议排名

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] Research.com是一个可以搜索学术会议网站的影响因子的网站。 好用是好用,但有一个缺点:得手动选择类目。有这么多类目,一个个手动选也太累了。 所以做了一个自动搜索的小工具&a…

HTTP杂谈之Referer和Origin请求头再探

一 关于Referer和Origin的汇总 1) 知识是凌乱的,各位看官看个热闹即可2) 内容不断更新1、理解有盲区,需要及时纠正2、内容交叉有重复,需要适当删减3、扩展视野3) 以下内容都与Referer和Origin请求头有关联 nginx防盗链 HTTP杂谈之Referrer-Policy响应头 iframe标签referre…

新手入门Jenkins自动化部署入门详细教程

1. 背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试; 或者前后端分离后,经常会修改接口,然后重新…

vue element el-upload附件上传、在线预览、下载当前预览文件

上传 在线预览&#xff08;iframe&#xff09;&#xff1a; payload&#xff1a; response&#xff1a; 全部代码&#xff1a; <template><div><el-table :data"tableData" border style"width: 100%"><el-table-column prop"d…

.Net6 Core Web API 配置 log4net + MySQL

目录 一、导入NuGet 包 二、添加配置文件 log4net.config 三、创建MySQL表格 四、Program全局配置 五、帮助类编写 六、效果展示 小编没有使用依赖注入的方式。 一、导入NuGet 包 ---- log4net 基础包 ---- Microsoft.Extensions.Logging.Log4Net…

天线辐射机制

电磁场如何从源中产生并最终脱离天线辐射到自由空间中去的呢&#xff1f;让我们首先来研究一下一些基本的辐射源。 1、单线Single Wire 导线是一种电荷运动产生电流特性的材料&#xff0c;假设用qv&#xff08;库仑/m3&#xff09;表示的一个电体积电荷密度均匀分布在一个横截…

ansible控制主机和受控主机之间免密及提权案例

目录 案例描述 环境准备 案例一--免密远程控制主机 效果展示&#xff1a; 解决方案 1.添加主机 2.通过ssh-key生成密钥对 3.生成ssh-copy-id 4.验证 案例二-----免密普通用户提权 效果展示 解决方案 1.使用普通用户&#xff0c;与案例一 一样&#xff0c;进行发送密钥…

pytest 自定义HOOK函数

除了系统提过的HOOK函数外&#xff0c;也可以通过自定义HOOK的方式实现想要的功能。 首先创建一个py文件&#xff0c;里面定义自己的HOOK函数&#xff0c;主要pytest里面的hook函数必须以pytest开头。 #myhook.pydef pytest_myhook(user):"""自定义HOOK函数&q…

【JavaEE初阶】Servlet(四) Cookie Session

文章目录 1. Cookie && Session1.1 Cookie && Session1.2 Servlet会话管理操作 1. Cookie && Session 1.1 Cookie && Session Cookie是什么? Cookie是浏览器提供的持久化存储数据的机制.Cookie从哪里来? Cookie从服务器返回给浏览器. 服务…

中小企业如何做好MES管理系统实施建设

中小企业在生产制造领域面临着诸多挑战&#xff0c;包括提升产品竞争力、规范生产制造等。为了应对这些挑战&#xff0c;越来越多的中小企业开始实施MES生产管理系统。然而&#xff0c;由于企业规模小、资源实力不足等原因&#xff0c;很多企业在实施MES管理系统时存在一定的困…

opencv rtsp 硬件解码

讨论使用opencv的reader 硬件解码的方案有太多种&#xff0c;如果使用ffmpeg硬件解码是最方便的&#xff0c;不方便的是把解码过后的GPU 拉到 CPU 上&#xff0c;再使用opencv的Mat 从cpu 上上载到gpu上&#xff0c;是不是多了两个过程&#xff0c;应该是直接从GPU mat 直接去…

腾讯测试大佬分享4个关于 Python 函数(方法)的冷知识

关于参数标识 不知道大家在工作中有没有遇到一种情况&#xff0c;你的同事 A 写了一个方法给你调用&#xff0c;然后你调用时不知道该传什么参数&#xff0c;然后这个同事 A 还很 cao dan 的居然不加班&#xff01;你一脸茫然的看着这个方法&#xff0c;当你尝试传进去一个 ab…

使用pg_prewarm缓存PostgreSQL数据库表

pg_prewarm pg_prewarm 直接利用系统缓存的代码,对操作系统发出异步prefetch请求&#xff0c;在应用中&#xff0c;尤其在OLAP的情况下&#xff0c;对于大表的分析等等是非常耗费查询的时间的&#xff0c;而即使我们使用select table的方式&#xff0c;这张表也并不可能将所有…

后端整理(MySql)

1 事务 1.1 事务ACID原则 原子性&#xff08;Atomicity&#xff09; 事务的原子性指的是事务的操作&#xff0c;要么全部成功&#xff0c;要么全部失败回滚 一致性&#xff08;Consistency&#xff09; 事务的一致性是指事务必须使数据库从一个一致状态转变成另一个一致性…

hugging face下载数据集

开始直接执行这个&#xff0c;下载下来的图片打不开 git clone https://huggingface.co/datasets/diffusers/dog-example 解决办法&#xff1a; 安装git lfs 1. curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash 2. sudo apt…

会议OA系统会议管理模块开发思路(layui搭建)

目录 一.为什么要进行开发 1.开发目的 2.项目流程 A.发起会议请求过程 1.首先实现我们的多选下拉框功能&#xff01; 2.时间组件功能&#xff0c;并且提交我们新增加的会议内容 3.在进行发起会议编码时遇到的问题&#xff0c;BUG 3.1.有点时候js访问不到路径 3.2在增加…

Ctfshow web入门 JWT篇 web345-web350 详细题解 全

CTFshow JWT web345 先看题目&#xff0c;提示admin。 抓个包看看看。 好吧我不装了&#xff0c;其实我知道是JWT。直接开做。 在jwt.io转换后&#xff0c;发现不存在第三部分的签证&#xff0c;也就不需要知道密钥。 全称是JSON Web Token。 通俗地说&#xff0c;JWT的本质…

【知网检索】2023年金融,贸易和商业管理国际学术会议(FTBM2023)

随着经济全球化&#xff0c;贸易自由化的进程加快&#xff0c;我国经济对外开放程度不断加深&#xff0c;正在加快融入世界经济一体化当中。当今世界各国竞争过程中&#xff0c;金融、贸易以及商业形态已成为其关键与焦点竞争内容。 2023年金融、贸易和商业管理国际学术会议(F…

神经网络简单介绍

人工神经网络(artififial neural network) 简称神经网络&#xff0c;它是一种模仿生物神经网络结构和功能的非线性数学模型。 神经网络通过输入层接受原始特征信息&#xff0c;再通过隐藏层进行特征信息的加工和提取&#xff0c;最后通过输出层输出结果。 根据需要神经网络可以…