一文带你上手自动化测试中的PO模式!

在UI的自动化测试中,我们需要把测试使用到的数据分离到文件中,如果单纯的写在我们的测试模块里面,不是一个好的设计,所以不管是什么类型的自动化测试,都是需要把数据分离出来的。当然分离到具体的文件里面,文件的形式其实有很多的,这里主要说明JSON的文件和YAML的文件在UI自动化测试中的应用。

一、JSON文件

JSON库主要应用于序列化以及反序列化中,特别是在API的自动化测试中,序列化以及反序列化是知识体系里面必须需要掌握的技术栈的体系。当然我们也是可以针对文件进行序列话和反序列化的处理,针对文件的序列化可以简单地理解为就是把第三方的数据写到文件里面,使用JSON库里面的方法是dump()方法,那么针对文件的反对序列化可以理解为是从文件中读取数据,使用到的JSON库里面的load()的方法,下面主要是针对UI自动化测试的数据进行分离,具体代码为:

import unittest
from parameterized import  parameterized,param
from selenium  import  webdriver
import  time as t#parameterized是参数化库class AddTest(unittest.TestCase):def setUp(self) -> None:self.driver=webdriver.Chrome()self.driver.maximize_window()self.driver.implicitly_wait(30)self.driver.get('https://mail.sina.com.cn/#')def tearDown(self) -> None:self.driver.quit()@parameterized.expand([param('','','请输入邮箱名'),param('srtSA','saert','您输入的邮箱名格式不正确'),param('aserSDAsd@sina.com','asdfrty','登录名或密码错误')])def test_sina_email(self,username,password,result):t.sleep(2)self.driver.find_element_by_id('freename').send_keys(username)t.sleep(2)self.driver.find_element_by_id('freepassword').send_keys(password)t.sleep(2)self.driver.find_element_by_link_text('登录').click()t.sleep(3)div=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')assert div.text==resultif __name__ == '__main__':unittest.main(verbosity=2)

在如上的文件中可以看到,我们可以把测试的数据分离到JSON文件中,分离的数据具体为:

{"data":[{"username": "","password": "","text": "请输入邮箱名"},{"username": "srtSA","password": "saert","text": "您输入的邮箱名格式不正确"},{"username": "aserSDAsd@sina.com","password": "asdfrty","text": "登录名或密码错误"}]
}

完善后的测试脚本为:

import unittest
from parameterized import  parameterized,param
from selenium  import  webdriver
import  time as t
import  jsondef readJson():return json.load(open('sina.json'))['data']class AddTest(unittest.TestCase):def setUp(self) -> None:self.driver=webdriver.Chrome()self.driver.maximize_window()self.driver.implicitly_wait(30)self.driver.get('https://mail.sina.com.cn/#')def tearDown(self) -> None:self.driver.quit()@parameterized.expand([param(readJson()[0]['username'],readJson()[0]['password'],readJson()[0]['text']),param(readJson()[1]['username'],readJson()[1]['password'],readJson()[1]['text']),param(readJson()[2]['username'],readJson()[2]['password'],readJson()[2]['text'])])def test_sina_email(self,username,password,result):t.sleep(2)self.driver.find_element_by_id('freename').send_keys(username)t.sleep(2)self.driver.find_element_by_id('freepassword').send_keys(password)t.sleep(2)self.driver.find_element_by_link_text('登录').click()t.sleep(3)div=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')assert div.text==resultif __name__ == '__main__':unittest.main(verbosity=2)
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

二、YAML文件

下面我们演示把测试数据存储到YAML文件里面,分离出来的文件内容为:

username: ""
password: ""
text: "请输入邮箱名"---
username: "srtSA"
password: "saert"
text: "您输入的邮箱名格式不正确"---
username: "aserSDAsd@sina.com"
password: "asdfrty"
text: "登录名或密码错误"

完善后的测试脚本为:

import unittest
from parameterized import  parameterized,param
from selenium  import  webdriver
import  time as t
import  json
import yamldef readJson():return json.load(open('sina.json'))['data']def readYaml():with open('sina.yaml') as f:return list(yaml.unsafe_load_all(f))class AddTest(unittest.TestCase):def setUp(self) -> None:self.driver=webdriver.Chrome()self.driver.maximize_window()self.driver.implicitly_wait(30)self.driver.get('https://mail.sina.com.cn/#')def tearDown(self) -> None:self.driver.quit()@parameterized.expand([param(readYaml()[0]['username'],readYaml()[0]['password'],readYaml()[0]['text']),param(readYaml()[1]['username'],readYaml()[1]['password'],readYaml()[1]['text']),param(readYaml()[2]['username'],readYaml()[2]['password'],readYaml()[2]['text'])])def test_sina_email(self,username,password,result):t.sleep(2)self.driver.find_element_by_id('freename').send_keys(username)t.sleep(2)self.driver.find_element_by_id('freepassword').send_keys(password)t.sleep(2)self.driver.find_element_by_link_text('登录').click()t.sleep(3)div=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')assert div.text==resultif __name__ == '__main__':unittest.main(verbosity=2)

如上,详细的演示了在UI的自动化测试中,我们可以把使用到的测试数据分离到JSON文件和YAML的文件,这样达到了数据的分离,目的是让测试更加简单和高效。

敲字不易,如果此文章对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

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

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

相关文章

智能井盖传感器:数智赋能让城市管理更智慧

智能井盖传感器:数智赋能让城市管理更智慧 在城市化快速发展的今天,保护和增强城市基础设施生命线的需求至关重要。而井盖作为守护城市地下空间的安全门,其智能化管理与城市生命线安全工程建设息息相关。在这篇文章中将为大家详细介绍智能井…

OpenCV级联分类器识别车辆实践笔记

1. OpenCV 级联分类器的基本原理 基于Haar特征的级联分类器的目标检测是Paul Viola和Michael Jones在2001年的论文中提出的一种有效的目标检测方法。这是一种基于机器学习的方法,从大量的正面和负面图像中训练级联函数。然后用它来检测其他图像中的物体。 Haar特征…

CTF Misc(3)流量分析基础以及原理

前言 流量分析在ctf比赛中也是常见的题目,参赛者通常会收到一个网络数据包的数据集,这些数据包记录了网络通信的内容和细节。参赛者的任务是通过分析这些数据包,识别出有用的信息,例如登录凭据、加密算法、漏洞利用等等 工具安装…

共生与共享:线程与进程的关系

🌍前言 在计算机科学和操作系统领域,线程(Thread)和进程(Process)是两个关键概念。它们之间存在密切的关系,但又有着明显的区别。本文将深入探讨线程和进程之间的关系,以及它们在并…

使用Perl脚本编写爬虫程序的一些技术问题解答

网络爬虫是一种强大的工具,用于从互联网上收集和提取数据。Perl 作为一种功能强大的脚本语言,提供了丰富的工具和库,使得编写的爬虫程序变得简单而灵活。在使用的过程中大家会遇到一些问题,本文将通过问答方式,解答一些…

telnet 连接闪退

目录 问题查找问题解决参考 问题 在使用 telnet 连接板子时,出现了 telnet 界面一闪而逝的情况。正常板子开机,查看其存在 telnetd 进程,而使用 telnet 后,登录界面一闪而逝,板子上的 telnetd 进程消失。 查找问题 …

python psutil库之——获取网络信息(网络接口信息、网络配置信息、以太网接口、ip信息、ip地址信息)

文章目录 使用Python psutil库获取网络信息安装psutil库获取网络连接信息查看所有网络连接过滤特定状态的连接 获取网络接口信息获取网络IO统计信息实例1实例2 总结 使用Python psutil库获取网络信息 Python的psutil库是一个跨平台库,能够方便地获取系统使用情况和…

docker-compose Install hfish

前言hfish HFish是一款社区型免费蜜罐,侧重企业安全场景,从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的能力。 HFish具有超过40种蜜罐环境、提供免费…

PTA 7-5 令人抓狂的四则运算

题目 曾记否,我们小学时,遇到这种四则运算,心情是抓狂的: 那么当我们学会使用计算机,自然是要程序去完成这个工作啦~ 现在请对输入的四则运算求值。注意: 四则运算表达式必定包含运算数,还可能…

【MySQL入门到精通-黑马程序员】MySQL基础篇-DCL

文章目录 前言一、DCL-介绍二、DCL-管理用户二、DCL-权限控制总结 前言 本专栏文章为观看黑马程序员《MySQL入门到精通》所做笔记,课程地址在这。如有侵权,立即删除。 一、DCL-介绍 DCL英文全称是Data Control Language(数据控制语言&#x…

基于FPGA的数字时钟系统设计

在FPGA的学习中,数字时钟是一个比较基础的实验案例,通过该实验可以更好的锻炼初学者的框架设计能力以及逻辑思维能力,从而打好坚实的基本功,接下来就开始我们的学习吧! 1.数码管介绍 数码管通俗理解就是将8个LED(包含…

使用 L293D 电机驱动器 IC 和 Arduino 控制直流电机

如果您打算组装新的机器人朋友,您最终会想要学习如何控制直流电机。控制直流电机最简单且经济的方法是将 L293D 电机驱动器 IC 与 Arduino 连接。它可以控制两个直流电机的速度和旋转方向。 此外,它还可以控制单极步进电机(如 28BYJ-48&#…

GLTF纹理贴图工具让模型更逼真

1、如何制作逼真的三维模型? 要使三维模型看起来更加逼真,可以考虑以下几个方面: 高质量纹理:使用高分辨率的纹理贴图可以增强模型的细节和真实感。选择适合模型的高质量纹理图像,并确保纹理映射到模型上的UV坐标正确…

栈的运行算法

一&#xff0c;顺序栈的静态分配 二&#xff0c;顺序栈的动态分配 #include<stdio.h> #include<stdlib.h> #define initsize 5 #define incresize 5typedef struct Sqstack{int *base;int *top;int stacksize; }Sqstack;void InitStack(Sqstack *s){(*s).base(int…

抖音小程序没人做了吗?

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 咱说的严谨点&#xff0c;不是没人做了&#xff0c;而是做的人少了。利益驱使&#xff0c;越来越多的人开始思考新方向了&#xff0c;开发小程序的人少了&#xff0c;排名也没多少人做了&#xff…

URL because the SSL module is not available

Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host‘pypi.org’, port443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(“Can’t connect to HTT PS URL because the…

c++day5

#include <iostream>using namespace std;class Sofa { private:string sitting; public:Sofa(){cout << "沙发的无参构造函数" << endl;}Sofa(string s):sitting(s){cout << "沙发的有参构造函数" << endl;}void show(){co…

《UnityShader入门精要》学习1

读者可以在开源网站github&#xff08;https://github.com/candycat1992/Unity_Shaders_Book&#xff09;上下载本书的源代码。 第二章 渲染流水线 渲染流水线的最终目的在于生成或者说是渲染一张二维纹理&#xff0c;即我们在电脑屏幕上看到的所有效果&#xff0c;它的输入是…

【Java 进阶篇】HTML 语义化标签详解

HTML&#xff08;HyperText Markup Language&#xff09;是构建Web页面的标准语言。在HTML中&#xff0c;标签&#xff08;tag&#xff09;是用于定义页面结构和内容的关键元素。在构建网页时&#xff0c;了解如何正确使用HTML标签是非常重要的&#xff0c;因为它们不仅影响页面…

【AIGC】如何在使用stable-diffusion-webui生成图片时看到完整请求参数

文章目录 背景开搞使用遇到的问题 背景 通过代码调用Stable Diffusion的txt2img、img2img接口时&#xff0c;很多时候都不知道应该怎么传参&#xff0c;比如如何指定模型、如何开启并使用Controlnet、如何开启面部修复等等&#xff0c;在sd-webui上F12看到的请求也不是正式调用…