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

news2024/12/23 13:04:53

在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==result

if __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  json

def 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==result


if __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 yaml

def 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==result


if __name__ == '__main__':
   unittest.main(verbosity=2)

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

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

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

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

相关文章

Arcgis实现Tiff合并

Arcgis实现Tiff合并 现有四幅Tiff影像 打开数据管理工具 输入使用这四幅影像 下面这个就是建立数据库,这个不对 点击确定 合成完毕

Facebook广告账户被封?最全防封及申诉指南

Facebook广告是海外营销的一大利器,但是随着互联网的发展,有部分不法分子正在利用他进行盈利,导致Facebook官方安全审核日益严格,不少卖家遭遇封号问题!这篇文章就来教你如何更好地管理 Facebook广告帐户,实…

精品Python的美食推荐系统厨房点餐订餐

《[含文档PPT源码等]精品Python的美食推荐系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等! 软件开发环境及开发工具: 开发语言:python 使用框架:Django 前端技术:JavaScript、VUE.…

大模型增长时代!低代码和 AI 的能力远不止 APP 开发

从低代码开发引发效率革命,到生成式 AI 打破传统限制、颠覆想象,一个前所未有的创造力时代已然开启。作为这场技术变革的见证者和参与者,让创新技术真正“为己所用”,解锁更多的潜在应用场景和机会,无疑是我们共同的目…

es6(二)——常用es6说明

ES6的系列文章目录 es6(一)——var和let和const的区别 文章目录 ES6的系列文章目录一、变量的结构赋值1.数组的结构赋值2.对象的结构赋值 二、模板字符串三、扩展运算符1.字符串的使用2.数组的使用 四、箭头函数1.普通函数的定义2.箭头函数的定义3.箭头…

大数据时代精准营销是提升品牌竞争力的核心

在营销理论基石渐被撼动和数字时代逐渐兴起的环境下,基于大众市场和大众消费的传统营销理论和方式在受众裂变(碎片化与再中心化)的现实中遇到了瓶颈,传统营销理念和方式在寻找目标受众的过程中已失去了威力。在数字化环境下,如何更好、更精准…

官方烧录软件烧写2023.10版本树莓派镜像

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、下载官方系统二、使用步骤1.打开软件烧写镜像2. ssh是什么?3. 远程控制2.VNC连接3.VNC突然断开,使用外接显示器和鼠标双击打开wifi即…

有关数据集处理的脚本工具【附代码】

在做分类项目的时候(包括目标检测),经常会涉及到数据集的预处理,这里我将把一些自己写的工具脚本代码开源出来供大家使用,后期也将不定时的更新。 相关功能: 1.分类任务one-hot标签转单标签 2.数据集中各个类别的统计 3.数据集…

ssm+vue的课程网络学习平台管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的课程网络学习平台管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体…

nodejs+vue+elementui酒店客房服务系统mysql带商家

视图层其实质就是vue页面,通过编写vue页面从而展示在浏览器中,编写完成的vue页面要能够和控制器类进行交互,从而使得用户在点击网页进行操作时能够正常。 简单的说 Node.js 就是运行在服务端的 JavaScript。 前端技术:nodejsvueel…

DBCO Sata650,二苯并环辛烷Sata650,Seta-650-DBCO

产品简介: CAS号:N/A 中文名:二苯并环辛烷Sata650 英文名:DBCO Sata650,Seta-650-DBCO 化学式:N/A 分子量:1431.85 纯度标准:95% 供应商:陕西新研博美生物科技有限公司 存储…

接口自动化测试框架搭建【附教程加源码】

1 接口测试 接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。 接口自动化相对于UI自动化来说,属于更底层的测试,这样带来的好处就是测试收益更大&#xff…

c++day6(菱形继承、虚继承、多态、模板、异常)

今日任务 1.思维导图 2.编程题&#xff1a; 代码&#xff1a; #include <iostream>using namespace std; /*以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&a…

网络安全(黑客技术)—0基础学习手册

目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类…

行业追踪,2023-10-12

自动复盘 2023-10-12 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

【设计模式】八、桥接模式

文章目录 举例问题分析基本介绍桥接模式在 JDBC 的源码剖析桥接模式的注意事项和细节JDBC 举例 现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网&#xff0c;打电话等)&#xff0c; 传统方法对应的类图&#xff1a; 问题分析 扩展性问题(类爆炸)&#xff…

YOLOv7优化:轻量高效注意力模块Sea_AttentionBlock | ICLR2023|SeaFormer:轻量级语义分割算法,复旦大学和腾讯联合提出

💡💡💡本文独家改进:一种即插即用的通用注意力模块Sea_AttentionBlock ,带有squeeze Axial和细节增强,二次创新引入到YOLOv7增强特征提取能力 Sea_AttentionBlock | 亲测在多个数据集能够实现大幅涨点 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI…

Raise抛出异常

raise 是Python中用于手动引发异常的关键字。你可以使用 raise 来触发特定类型的异常&#xff0c;以便在程序的某个位置明确地报告错误。以下是一个示例说明 raise 的用法&#xff1a; def divide(x, y):if y 0:raise ZeroDivisionError("除以零错误&#xff1a;y不能为…

高考600分能上哪些大学 分数线在600以下的大学

大部分学生在高考时最关注一定就是自己的分数最终可以考上哪些大学了&#xff0c;其中600是很多人最关注的一个分数线&#xff0c;那么高于600分的话可以上哪些大学呢&#xff1f;下面就来告诉大家吧。 高考600分能上的大学&#xff1a;湖南大学、西南大学、西安电子科技大学、…

nodejs+vue+elementui大学生心理健康管理系统

简单的说 Node.js 就是运行在服务端的 JavaScript。 前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE本大学生心理健康管理系统使用简洁的框架结构&#xff0c;专门用于用户咨询心理专家&#xff0c;系统具有方便性、灵活性、应用性。于是…