项目实战:pandas+pytest+allure+adb

文章目录

  • [1. 环境搭建](#1. 环境搭建)
    • [1.1. 基本环境](#1.1. 基本环境)
    • [1.2. 所需依赖](#1.2. 所需依赖)
  • [2. 测试用例规范化](#2. 测试用例规范化)
  • [3. pandas](#3. pandas)
    • [3.1. 安装](#3.1. 安装)
    • [3.2. 导入](#3.2. 导入)
    • [3.3. 使用](#3.3. 使用)
      • [3.3.1. 读取excel文件](#3.3.1. 读取excel文件)
      • [3.3.2. 数据类型转换](#3.3.2. 数据类型转换)
  • [4. 设备通信](#4. 设备通信)
    • 4.1.pure-python-adb (ppadb)
    • [4.1.1. 安装](#4.1.1. 安装)
    • [4.1.2. 导入](#4.1.2. 导入)
    • [4.1.3. Client](#4.1.3. Client)
    • [4.1.4. Device](#4.1.4. Device)
  • [4.2. uiautomator2](#4.2. uiautomator2)
    • [4.2.1. 安装](#4.2.1. 安装)
    • [4.2.2. 导入](#4.2.2. 导入)
    • [4.2.3. 获取设备id](#4.2.3. 获取设备id)
  • [4. pytest](#4. pytest)
    • [4.1. 安装](#4.1. 安装)
    • [4.2. 导入](#4.2. 导入)
    • [4.3. pytest VS unittest](#4.3. pytest VS unittest)
      • [4.3.1. 对比图](#4.3.1. 对比图)
      • [4.3.2. 举例](#4.3.2. 举例)

目的:实现excel格式测试用例的自动化测试,用到什么记什么。

1. 环境搭建

1.1. 基本环境

python 复制代码
adb
python
VSCode
Android设备
测试用例.xls

1.2. 所需依赖

批量安装项目依赖包,-r 是参数,全称 --requirement,作用是从指定文件中读取依赖列表并一键安装。

python 复制代码
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

requirements.txt是一个纯文本文件,记录项目需要的所有依赖包及版本号。

python 复制代码
# requirements.txt
pytest
pandas
openpyxl
opencv-python
numpy
loguru
allure-pytest
# 复写增加
pure-python-adb

# 示例:可指定版本
# requests==2.31.0
# pandas>=2.0.0

不创建txt文件,一次性安装多个包就直接把包名用空格隔开写在后面。

python 复制代码
pip install pytest pandas

2. 测试用例规范化

测试用例八要素:

  1. 用例编号:唯一标识,方便定位、统计、追溯,如:CAM_PRE_001
  2. 用例标题:一句话说明测什么,如:后置摄像头正常预览
  3. 所属模块:归属功能模块,如:相机预览、变焦功能、拍照功能
  4. 前置条件:执行用例前必须满足的环境 / 状态,如:相机已打开、后摄模式
  5. 测试步骤:可复现的操作步骤,一步一步写清楚
  6. 预期结果:每一步执行后应该出现的正确结果
  7. 测试数据:用到的参数、配置、输入值,如:变焦倍数、分辨率、对焦位置
  8. 优先级:用例重要程度,一般分:P0(冒烟)、P1(核心)、P2(一般)、P3(次要)

3. pandas

菜鸟教程:https://www.runoob.com/pandas/pandas-tutorial.html

  1. 从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据
  2. 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征
  3. 广泛应用在学术、金融、统计学等各个数据分析领域

3.1. 安装

python 复制代码
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

3.2. 导入

python 复制代码
import pandas as pd

3.3. 使用

3.3.1. 读取excel文件

Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据)。

  • Series 是一种类似于一维数组的对象,它由一组数据(各种 Numpy 数据类型)以及一组与之相关的数据标签(即索引)组成。
  • DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
python 复制代码
# 从指定路径的.xls/.xlsx文件中读取数据并加载为DataFrame结构。
df = pd.read_excel("test_cases/camera_cases.xlsx")

3.3.2. 数据类型转换

pytest 的数据驱动语法@pytest.mark.parametrize只认识、列表、元组、字典、字典列表,pandas转换得到的是DataFrame结构。

测试用例需要易读、易用、已维护。采取字典列表,一个字典对应一条用例,将所有用例放入一个列表中实现循环、遍历、逐条执行。

4. 设备通信

可选ppadb、uiautomator2、subprocess、os

4.1.pure-python-adb (ppadb)

纯 Python 实现的 ADB 客户端库,直接用 Python 代码控制 Android 设备,与本地 ADB 服务器(默认 127.0.0.1:5037)通信,不需要调用系统 adb 命令、不需要 subprocess。

4.1.1. 安装

python 复制代码
pip install pure-python-adb -i https://pypi.tuna.tsinghua.edu.cn/simple

4.1.2. 导入

python 复制代码
from ppadb.client import Client as AdbClient

4.1.3. Client

python 复制代码
# 默认:127.0.0.1:5037
client = AdbClient()

# 常用方法
client.version()        # ADB 版本
client.devices()        # 所有已连接设备(列表)
client.device("序列号") # 根据 SN 取设备
client.kill()           # 停止 ADB 服务
client.start_server()   # 启动 ADB 服务

4.1.4. Device

python 复制代码
device = client.devices()[0]

# 1. 执行 Shell(最常用)
output = device.shell("input tap 500 600")

# 2. 文件传输
device.push("本地路径/a.apk", "/sdcard/a.apk")
device.pull("/sdcard/screen.png", "本地保存路径")

# 3. 应用管理
device.install("test.apk")
device.uninstall("com.xxx.app")
device.is_installed("com.xxx.app")

# 4. 设备信息
device.serial   # 序列号
device.model    # 型号

4.2. uiautomator2

4.2.1. 安装

环境搭建及问题解决:https://blog.csdn.net/WEB___/article/details/135905550?spm=1011.2415.3001.5331

4.2.2. 导入

python 复制代码
import uiautomator2 as u2
d = u2.connect()

d得到的就是设备对象,等价于 ppadb 的 device,内部已经建立了 ADB 连接,不需要再手动连 ADB

底层自动帮你做了所有事:

  1. 连接 ADB 服务
  2. 获取设备列表
  3. 如果连不上 → 自动尝试重启 adb
  4. 如果没有设备 → 直接抛明确错误
  5. 如果有多个设备 → 自动选第一个
  6. 最终直接返回给设备对象 d

4.2.3. 获取设备id

u2.connect() 默认取第一个设备,连多个设备必须用设备 SN 分别连接,每个设备都会得到独立的 d 对象(d1、d2),互不干扰。

python 复制代码
import uiautomator2 as u2

# 连接设备1
d1 = u2.connect("123456")
# 连接设备2
d2 = u2.connect("789012")

未指明设备SN,可通过列表获取

python 复制代码
import uiautomator2 as u2

# 获取所有已连接的设备 SN 列表
devices = u2.connect_adb().devices()
print(devices)  # 输出 [('123456', 'device'), ('789012', 'device')]

# 分别连接
d1 = u2.connect(devices[0][0])
d2 = u2.connect(devices[1][0])
python 复制代码
d = u2.connect() # 连接设备
d(text="文字").click() # 文字点击
d(resourceId="包名:id/xxx").click() # resourceId点击
d.click(x,y) # 坐标点击
d.shell("命令") # 发送 ADB 命令
d.app_start("包名")# 打开 APP
d.screenshot() # 截图

4. pytest

4.1. 安装

pytest作为第三方库,需要另外进行安装。

python 复制代码
pip install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple

4.2. 导入

python 复制代码
import pytest

4.3. pytest VS unittest

pytest和unittest都是 Python 单元测试 / 接口自动化测试框架,但设计理念、写法、生态完全不同。

4.3.1. 对比图

4.3.2. 举例

pytest在使用上更简洁。

python 复制代码
import unittest

class TestLogin(unittest.TestCase):
    def test_login_success(self):
        self.assertEqual(200, 200)   # 必须用自带断言
python 复制代码
def test_login_success():
    assert 200 == 200  # 直接用Python原生断言
相关推荐
橘子编程5 小时前
Django全栈开发终极指南
后端·python·django·npm·html·pandas·html5
MediaTea6 小时前
Pandas:文件读写与数据接口
pandas
海 月6 小时前
scrcpy Could not list ADB devices
adb
|华|15 小时前
Mysql故障排查与生产环境优化
adb
哇蛙蛙16 小时前
同时装mysql57和80,57服务莫名消失的问题解决方案
经验分享·adb
BduL OWED17 小时前
mysql的主从配置
android·mysql·adb
枕布响丸辣1 天前
基于 MySQL+MHA+Keepalived 搭建高可用主从集群实战
adb
imuliuliang1 天前
Java MySQL 连接
java·mysql·adb
炸炸鱼.1 天前
MySQL 故障排查与生产环境优化(精简实用版)
数据库·mysql·adb