python+appium+pytest自动化测试-参数化设置

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

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

参数化设置

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

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

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

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

1.传入一个参数,一个参数对应一个数值
import pytestclassTestAccountLogin:# 参数化:传入一个参数,一个参数对应一个值    @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 pytestclassTestAccountLogin:# 参数化:传入两个参数,一个参数对应一个值    @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 pytestclassTestAccountLogin:# 参数化:传入两个参数,一个参数对应两个值    @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 pytestclassTestAccountLogin:# 所有参数的组合    @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 yamlclassTestAccountLogin:# 在初始化前面先获取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.mzph.cn/news/147889.shtml

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

相关文章

IntelliJ IDEA 2023 v2023.2.5

IntelliJ IDEA 2023是一款功能强大的集成开发环境(IDE),为开发人员提供了许多特色功能,以下是其特色介绍: 新增语言支持:IntelliJ IDEA 2023新增对多种编程语言的支持,包括Kotlin、TypeScript、…

基于寄生捕食算法优化概率神经网络PNN的分类预测 - 附代码

基于寄生捕食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于寄生捕食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于寄生捕食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

Python正则表达式学习笔记(入门)

1. 介绍 正则表达式是一种强大的模式匹配工具,用于处理文本数据。在Python中,我们使用re模块来操作正则表达式。 2. 基本语法 建议先看 "5. re模块函数"了解search和match的区别"和 2.3 特殊字符转义"了解如何应对特殊符号 2.1 字…

MATLAB与Excel的数据交互

准备阶段 clear all % 添加Excel函数 try Excel=actxGetRunningServer(Excel.Application); catch Excel=actxserver(Excel.application); end % 设置Excel可见 Excel.visible=1; 插入数据 % % 激活eSheet1 % eSheet1.Activate; % 或者 % Activate(eSheet1); % % 打开…

js:react使用zustand实现状态管理

文档 https://www.npmjs.com/package/zustandhttps://github.com/pmndrs/zustandhttps://docs.pmnd.rs/zustand/getting-started/introduction 安装 npm install zustand示例 定义store store/index.js import { create } from "zustand";export const useCount…

【漏洞复现】浙大恩特CRM文件上传0day

漏洞描述 浙大恩特客户资源管理系统任意文件上传漏洞 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用…

C 语言 gets()和puts()

C 语言 gets()和puts() gets()和puts()在头文件stdio.h中声明。这两个函数用于字符串的输入/输出操作。 C gets()函数 gets()函数使用户可以输入一些字符,然后按Enter键。 用户输入的所有字符都存储在字符数组中。 空字符将添加到数组以使其成为字符串。 gets()允…

Rust开发——切片(slice)类型

1、什么是切片 在 Rust 中,切片(slice)是一种基本类型和序列类型。在 Rust 官方文档中,切片被定义为“对连续序列的动态大小视图”。 但在rust的Github 源码中切片被定义如下: 切片是对一块内存的视图,表…

【草料】uni-app ts vue 小程序 如何如何通过草料生成对应的模块化二维码

一、查看uni-app项目 1、找到路径 可以看到项目从 src-race-pages-group 这个使我们目标的查询页面 下面我们将这个路径copy到草料内 2、找到进入页面入参 一般我们都会选择 onload() 函数下的入参 这里我们参数的是 id 二、草料 建议看完这里的教程文档 十分清晰&#xff01…

【Linux】C文件系统详解(三)——如何理解缓冲区以及自主封装一个文件接口

文章目录 如何理解缓冲区现象概念:文件缓冲区为什么要有缓冲区缓冲区在哪里 自己封装一个简单的文件接口自主封装目标 代码关于缓冲区强制刷新内核 关于字符串格式化函数printf和scanf函数 如何理解缓冲区 以前写过一个进度条, 有一个输出缓冲区->这个缓冲区在哪里,为什么要…

hyperledger fabric2.4测试网络添加组织数量

!!!修改内容比较繁琐,预期未来提供模板修改 修改初始配置文件,初始添加3个组织 organizations文件夹 /cryptogen文件夹下创建文件crypto-config-org3.yaml,内容如下: PeerOrgs:# ---------------------------------------------------------------------------# Org3# ----…

酷柚易汛ERP - 序列号盘点操作指南

1、应用场景 将系统中开启序列号的商品数量与与实际存放的数量进行对比。 2、主要操作 2.1 录入序列号 打开【盘点】-【序列号盘点】,新增序列号盘点单,点击【SN】按钮,在弹框中输入序列号。 支持扫描枪录入序列号支持复制粘贴序列号录入…

Java(二)(String的常见方法,ArrayList的常见方法)

String 创建string对象 package Helloworld;public class dome1 {public static void main(String[] args) {// 1.直接双引号得到字符串对象,封装字符串对象String name "lihao";System.out.println(name);// 2. new String 创建字符串对象,并调用构造器初始化字符…

Vue第1天:特性概览

文章目录 Vue.js 简介 Vue的特性 如何使用Vue 安装Vue 通过CDN引入 使用npm 创建Vue实例 结语 Vue.js 简介 Vue.js(通常简称为Vue)是一款流行的JavaScript框架,专注于构建用户界面。它的设计灵感来自于现代的JavaScript框架&#xf…

用Java写一个贪吃蛇游戏

目录 创建窗体 创建游戏棋盘 创建蛇的节点 创建蛇身 让蛇移动 添加键盘监听 添加边界处理 把食物绘制到棋盘上 吃食物 创建窗体 创建一个MainFrame类继承JFrame,表示主窗体。 public class MainFrame extends JFrame {//创建窗体对象时,初始化…

力扣 字母异位词分组 哈表 集合

👨‍🏫 力扣 字母异位词分组 ⭐ 思路 由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。 🍑 AC code class Solut…

解析Spring Boot中的CommandLineRunner和ApplicationRunner:用法、区别和适用场景详解

在Spring Boot应用程序中,CommandLineRunner和ApplicationRunner是两个重要的接口,它们允许我们在应用程序启动后执行一些初始化任务。本文将介绍CommandLineRunner和ApplicationRunner的区别,并提供代码示例和使用场景,让我们更好…

阿里云配置ssl(Apache)

阿里云申请证书,有个专门的免费的申请方式与普通证书是平级的功能; 访问服务器,判断apache是不是开启ssl功能,如果没有安装就安装它 [rootcentos ~]# rpm -qa | grep mod_ssl //什么没显示说明没装 yum install mod_ssl openssl …

公共字段自动填充-@TableField的fill实现(2)

TheadLocal 客户端发送的每次http请求,在服务端都会分配新的线程。因此登录检查过滤器、controller、元数据对象处理器属于一个线程。 TheadLocal是线程的局部变量: TheadLocal常用方法: 如何在元数据对象处理器中获取当前登录用户的id&…

大数据专业有哪些基础的理论和技术

大数据专业有哪些基础的理论和技术 大数据专业涉及的基础理论和技术很广泛,主要包括以下几个方面: 数据管理与处理理论:大数据处理涉及到海量数据的管理、存储和处理,因此数据库理论、数据结构与算法、数据压缩与索引等知识是非常…