Python+Appium+Pytest自动化测试-参数化设置

news2024/11/28 0:55:51

来自APP Android端自动化测试初学者的笔记,写的不对的地方大家多多指教哦。(所有内容均以微博V10.11.2版本作为例子)

在自动化测试用例执行过程中,经常出现执行相同的用例,但传入不同的参数,导致我们需要重复的写用例,这样会使我们的用例变得很长,冗余,很多地方需要编码。参数化可以通过修改传入的参数,从而让相同步骤的用例可以多次执行,对测试用例进行迭代调用。

参数化设置

一:使用装饰器实现参数化设置

参数化需要用到pytest的装饰器:@pytest.mark.parametrize()

方法:parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

上例子,所有内容均已微博的账号密码登录作为例子

1.传入一个参数,一个参数对应一个数值

import pytest
 
classTestAccountLogin:
 
    # 参数化:传入一个参数,一个参数对应一个值    @pytest.mark.parametrize("account", ["123123231321313"])deftest_one(self, account):
        pwd = "asdfgh"
        self.account_login_page.input_account_pwd(account, pwd)
        print("\na的值:", account)

运行结果为:

2.传入两个参数,一个参数对应一个数值

import pytest
 
classTestAccountLogin:
 
    # 参数化:传入两个参数,一个参数对应一个值    @pytest.mark.parametrize("account, pwd", [("123123231321313", "asfgh")])deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
	print("\naccount的值:", account, "\npwd的值:", pwd)

运行结果为:

3.传入两个参数,一个参数对应多个数值

import pytest
 
classTestAccountLogin:
 
    # 参数化:传入两个参数,一个参数对应两个值    @pytest.mark.parametrize("account, pwd", [
        ("123123231321313", "asdfgh"),
        ("12345645612", "123123")
    ])deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
	print("\naccount的值:", account, "\npwd的值:", pwd)

运行结果为;

注意:@pytest.mark.parametrize()装饰器的第一个参数是字符串的形式来表示用例函数的参数,第二个参数以列表或元组的形式传递测试数据,且装饰器的参数与传入用例函数中的参数是一致的。

4.要获得多个参数化参数的所有组合,可以堆叠 parametrize装饰器

import pytest
 
classTestAccountLogin:
    # 所有参数的组合    @pytest.mark.parametrize("account", ["123123123123", "1456456456456", "1789789789789"])    @pytest.mark.parametrize("pwd", ["we", "you", "he"])deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
        print("\naccount的值:", account, "\npwd的值:", pwd)

运行结果为:

注意:如上图,可知所有参数的组合是将参数1的数据分别于参数2的所有数据进行组合配对

二:参数化读取内部列表数据

在测试类中建立数据列表,存放参数对应的数据。这种方法将每个测试类中涉及到的参数数据都写在类的内部,在运行时可以快速方便的修改参数数据。

import pytest
 
# 建立数据列表,存放传入参数对应的数据
data = [("w124hhh77", "111"),
        ("q123457gg", "222"),
        ("rdde54sds", "333")
       ]
 
classTestAccountLogin:
    # 参数化数据读取内部列表数据    @pytest.mark.parametrize("account, pwd", data)deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
        assert self.account_login_page.get_bounced_context() == "你尚未注册微博,是否立即注册"

运行结果为:

三:参数化读取自外部yaml文件
使用参数化读取外部yaml文件,只需要维护数据文件,不需要在代码中改动数据,就可以动态的增加新的测试用例数据。

要读取外部的yaml文件,需要先安装yaml的包,命令行输入:pip install pyyaml,安装成功后如下图所示。在PyCharm中安装的话,是在File→setting,搜索pytest intrepreter,点击“+”号,搜索PyYAML,安装即可。

首先在工程目录(即测试类外部)下创建一个.yaml文件

在yaml文件中设置传入的参数对应数值

测试类中实现参数化读取外部yaml文件

import pytest
import yaml
 
classTestAccountLogin:
    # 在初始化前面先获取yaml文件
    account_data = yaml.safe_load(open("E:\\study\\Fork\\WeiboDemo\\Weibo\\data\\account_login.yaml", "r"))
    print(account_data)
 
    # 参数化数据读取外部文件yaml    @pytest.mark.parametrize("account, pwd", account_data)deftest_two(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
        assert self.account_login_page.get_bounced_context() == "你尚未注册微博,是否立即注册"

运行结果为:

这边在打开yaml文件时使用相对路径会出现No such file or directory: 'account_login.yaml‘的错误,需要使用绝对路径,不知道是什么原因,大神有空的话可以帮忙提点下吗?谢谢! 

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

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取  

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

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

相关文章

【Redis基础】快速入门

一、初识Redis 1. 认识NoSQL 2. 认识Redis Redis诞生于2009年,全称是Remote Dictionary Server(远程词典服务器),是一个基于内存的键值型NoSQL数据库特征 (1)键值(key-value)型&am…

测试员如何突破自我的瓶颈?我有几点看法

前阵子我自己也对如何“突破瓶颈”思考过,我觉得“突破瓶颈”、“弥补短板”等等都大同小异,从古至今就是测试员们津津乐道的话题。我也对自己该如何“突破瓶颈”总结了几点,跟大家分享下: 1、“常立志、立长志”。“立志”就是目…

Vue脚手架使用【快速入门】

一、使用vue脚手架创建工程 在黑窗口中输入vue ui命令 再更改完路径地址后需要按回车 二、vue工程中安装elementui 第一种可以在黑窗口输入命令安装 npm install -s element-ui第二种使用图形化安装 三、 在vue工程中安装axios 第一种可以在黑窗口输入命令安装 npm inst…

ECMAScript6之一

目录 一、介绍 二、新特性 2.1 let 和 const 命令 2.2 es6的模板字符串 2.3 增强的函数 2.4 扩展的字符串、对象、数组功能 2.5 解构赋值 2.6 Symbol 2.7 Map 和 Set 2.8 迭代器和生成器 2.9 Promise对象 2.10 Proxy对象 2.11 async的用法 2.22 类class 2.23 模块…

linux内核中kmalloc与vmalloc

kmalloc 和 vmalloc 是 Linux 内核中的两种内存分配方法,它们都用于为内核分配内存,但它们在使用和管理内存方面存在一些重要差异。下面我们详细讨论这两种内存分配方法的异同。 相同点: 都是内核空间的内存分配方法。都可以用于动态分配内…

anaconda目录下的pkgs文件夹很大,可以删除吗?

pkgs这个目录占用了6GB的硬盘空间。 其实里面是conda安装第三方包的时候保存在本地的下载文件,大部分是可以删除的。 只是删除后,后续你需要创建虚拟环境的时候或者在虚拟环境下pip安装第三方库的时候,会从网络去下载,没法直接从…

Jmeter的常用设置(一)

文章目录 前言一、Jmeter设置中文 方法一(临时改为中文)方法二(永久改成中文)二、启动Jmeter的两种方式 方法一(直接启动,不打开cmd窗口)方法二(带有cmd窗口的启动)三、调…

【xxl-job】本地部署并接入xxl-job到项目中

本地部署并接入xxl-job到项目中 一、xxl-job简介 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 什么是分布式任务调度 通常任务调度的程序是集成在应用…

SparkCoreDAG

DAG有向无环图 倒推 故推导程序的执行计划时,先看代码有几个action算子,从action倒推 一个action会产生一个JOB(DAG)(即一个应用程序内的子任务) 一个action一个Job一个DAG 一个application里面可以有多…

Latex:画图识别符号

http://detexify.kirelabs.org/classify.html

RDMA RoCev2 CM建链和Socket建链测试

前言 RDMA在高性能计算,AI大模型训练中发挥着重要的作用。 主流支持RDMA的协议有IB、RoCev1、RoCev2、iWARP。 其中RoCev2是应用最广泛的协议,因为其RDMA over UDP/IP,不依赖昂贵的IB网络设备,同时支持路由,性能上也…

Azure Kinect 之 Note(一)

Azure Kinect Azure Kinect DK 是一款开发人员工具包,配有先进的AI 传感器,提供复杂的计算机视觉和语音模型。 Kinect 将深度传感器、空间麦克风阵列与视频摄像头和方向传感器整合成一体式的小型设备,提供多种模式、选项和软件开发工具包(S…

Web开发模式

Web开发介绍 1 什么是web开发 Web:全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的网站。 所以Web开发说白了,就是开发网站的,例如下图所示的网站:淘宝,京东等等 那么我们…

【*2400 线段树】CF444 C

Problem - C - Codeforces 题意: 思路: 首先询问的是权值和,那么维护一个区间和sum,因此pushup部分就好了 考虑修改,区间修改,因此要打标记 一次修改对区间和的贡献不能直接计算,因此我们考…

8-1、Deployment运行应用的机制

Kubernetes 通过各种 Controller 来管理 Pod 的生命周期。为了满足不同业务场景,Kubernetes 开发了 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 、 CronJob 等多种 Controller。 用户通过 kubectl 创建 Depl…

ENSP模拟器如何设置命令行和描述框的背景颜色及字体

ENSP模拟器如何设置命令行和描述框的背景颜色及字体 选择“菜单 > 工具 > 选项”, 在弹出界面中选择“字体设置”。 单击“字体”后的“选择”设置字体,单击“字体颜色”后的“选择”设置字颜色,单击“背景颜色”后的“选择”设置…

UnityVR--机械臂场景11-简单流水线应用3

目录 一. 前言 二. 设置一个定时器 三. 添加机械臂事件 四. 机械臂控制函数OnArmCtrl 五. 定义上面的3个机械臂移动方法 六. 机械臂各关节转动控制 七. 场景实现 八. 完整代码 一. 前言 上一篇使用了DoTween插件,并且改写了事件的相关参数,本篇…

jenkins 关闭关闭CSRF Protection(跨站请求伪造保护)

jenkins版本 我的jenkins版本是:2.332.4 背景 Jenkins版本自2.204.6以来的重大变更有:删除禁用 CSRF 保护的功能。 从较旧版本的 Jenkins 升级的实例将启用 CSRF 保护和设置默认的发行者,如果之前被禁用。 解决方法 老版本Jenkins的CSRF…

QT各种控件常用样式表qss示例

1、表格控件QTableWidget和QTableView 这个控件比较复杂,里面包含了滑动条、表头(又细分为内容区/空白区)、表格、整体、左上角按钮等多种不同的元素,他们之间有复杂的叠层关系。需要通过各种“选择器”来指定样式的作用范围。 …

解决openKylin显示不能自适应VMware窗口大小的教程

目录 前言解决步骤效果图 前言 相信很多朋友们使用VMware配置成功openKylin后对遇到不能全屏显示的问题很头痛,今天我用我自己的电脑为例,给大家示范一下。 网上对于虚拟机不能自适应VMware主要有两个方案 一个是编辑虚拟机设置----显示器----指定监…