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.mzph.cn/news/15549.shtml

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

相关文章

JVM入门篇-JVM的概念与学习路线

JVM入门篇-JVM的概念与学习路线 什么是 JVM 定义 Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 好处 一次编写,到处运行自动内存管理,垃圾回收功能数组下标越界检查多态 比较 jvm jre jdk 常…

单片机第一季:零基础12——I2C和EEPROM

目录 1,EEPROM 2,I2C 2.1,I2C物理层 2.2,I2C协议层 3,AT24C02介绍 4,代码 1,EEPROM 为什么需要EEPROM? 单片机内部的ROM只能在程序下载时进行擦除和改写,但是…

护眼灯全光谱和减蓝光哪个好?推荐五款好用护眼台灯

如今,面临视力下降的问题越来越重视,护眼灯越来越成为人们日常生活中不可或缺的一部分,特别是在工作和学习中使用电脑、手机等电子设备时间较长的人群中。对于护眼灯来说,全光谱和减蓝光都是其主要功能之一,那么哪一种…

aws中opensearch 日志通(Centralized Logging with OpenSearch)2.0(一)

aws日志通2.0 实现全面的日志管理和分析功能 一体化日志摄取 :把aws服务器日志和应用日志传输到opensearch域中无代码日志处理 :在网页控制台中就可以实现数据处理开箱即用 :提供可视化模版(nginx、HTTP server ) 架构…

使用 CSS 自定义属性

我们常见的网站日夜间模式的变化,其实用到了 css 自定义属性。 CSS 自定义属性(也称为 CSS 变量)是一种在 CSS 中预定义和使用的变量。它们提供了一种简洁和灵活的方式来通过多个 CSS 规则共享相同的值,使得样式更易于维护和修改。…

【LeetCode每日一题】——566.重塑矩阵

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 矩阵 二【题目难度】 简单 三【题目编号】 566.重塑矩阵 四【题目描述】 在 MATLAB 中&…

小红书运营推广方法分享

大家好,我是网媒智星,今天跟大家讨论一下小红书的运营推广方法,总结了七点经验分享给大家。 首先,让我们了解一下什么是热门文案。热门文案可从以下三个方面来定义: 1. 阅读量:如果一篇小红书的阅读量达到上…

【RabbitMQ】golang客户端教程1——HelloWorld

一、介绍 本教程假设RabbitMQ已安装并运行在本机上的标准端口(5672)。如果你使用不同的主机、端口或凭据,则需要调整连接设置。如果你未安装RabbitMQ,可以浏览我上一篇文章Linux系统服务器安装RabbitMQ RabbitMQ是一个消息代理&…

《MySQL 实战 45 讲》课程学习笔记(四)

深入浅出索引 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。 索引的常见模型 哈希表 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Val…

docker中涉及的挂载点总结

文章目录 1.场景描述2. 容器信息在主机上位置3. 通过docker run 命令4、通过Dockerfile创建挂载点5、容器共享卷(挂载点)6、最佳实践:数据容器 1.场景描述 在介绍VOLUME指令之前,我们来看下如下场景需求: 1&#xff…

xshell连接liunx服务器身份验证不能选择password

ssh用户身份验证不能选择password 只能用public key的解决办法 问题现象 使用密码通过Workbench或SSH方式(例如PuTTY、Xshell、SecureCRT等)远程登录ECS实例时,遇到服务器禁用了密码登录方式错误. 可能原因 该问题是由于SSH服务对应配置文件/etc/ssh/sshd_config中…

路由器工作原理

路由器原理 路由概述 路由:跨越从源主机到目标主机的一个互联网络来转发数据包的过程。(为数据包选择路径的过程) 作用:路由器是连接不同网段的。 转发依据: 路由表:路径选择全看路由表,根…

蓝桥杯2018省赛全球变暖dfs

全球变暖 问题描述格式输入格式输出样例输入样例输出评测用例规模与约定解析参考程序 问题描述 格式输入 格式输出 输出一个整数 样例输入 样例输出 1 评测用例规模与约定 最大运行时间:1s最大运行内存: 256M 解析 采用dfs的方式进行搜索,首先输入地…

Xshell使用是出现全黑或全白问题

Xshell使用是出现全黑或全白问题,这是我实际遇到的问题如图。 解决方式: 设置字体 解决成功:

整理mongodb文档(一):增

个人公众号 整理mongodb文档(一):增 看前提示 本文主要用到的工具是mongodb的db管理工具-----mongo compass。 本文主要讲的是在上述工具中如何对db的增加的操作,对应转化为mongose里面的语句我想应该不需要我帮忙了吧。。。 选用mongose的理由也很简单&#xf…

一个监控系统的典型架构

监控系统的典型架构图,从左往右看,采集器是负责采集监控数据的,采集到数据之后传输给服务端,通常是直接写入时序库。然后就是对时序库的数据进行分析和可视化,分析部分最典型的就是告警规则判断,即图上的告…

Java阶段五Day14

Java阶段五Day14 文章目录 Java阶段五Day14分布式事务整合demo案例中架构,代码关系发送半消息本地事务完成检查补偿购物车消费 鲁班周边环境调整前端启动介绍启动前端 直接启动的项目gateway(网关)login(登录注册)atta…

网络请求fetch

fetch()是 XMLHttpRequest 的升级版,用于在 JavaScript 脚本里面发出 HTTP 请求。浏览器原生提供这个对象 fetch()的功能与 XMLHttpRequest 基本相同,但有三个主要的差异。 与 Ajax 类似,Fetch 也是前后端通信的一种方式。Fetch 要比 Ajax …

React Flow

// 创建项目 npm create vitelatest my-react-flow-app -- --template react // 安装插件 npm install reactflow npm install antd // 运行项目 npm run dev 1、App.jsx import { useCallback, useState } from react; import ReactFlow, {addEdge,ReactFlowProvider,MiniMap…

享元模式——实现对象的复用

1、简介 1.1、概述 当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题。例如,在一个文本字符串中存在很多重复的字符,如果每个字符都用一个单独的对象来表示,将会占用较多的内存…