手把手教学UI自动化测试之数据驱动

对UI进行自动化测试时,需要将测试所用数据从文档中分离出来,若只是简单地写入测试模块,并不是很好地设计,因此无论哪种自动化测试都要对数据进行拆分。为了实现这个目的,我们可以通过一些方法将它们分开来。而这些方法就包括了JSON,YAML以及Java等相关技术。JSON就是一种比较典型的方式。所以本文研究了基于JSON和YAML的UI自动化测试的方法。

JSON库多用于序列化和反序列化,尤其适用于API自动化测试,序列化与反序列化都是知识体系内技术栈必须具备的系统。所以对于JSON库的研究就显得非常重要了。我们知道,json库是一种比较常用的数据库语言,它有很多优点,比如结构清晰,容易维护等等。当然,我们可以对文档做序列话与反序列化,对文档做序列化可简单理解为对第三方数据写入文档,用JSON库中方法有dump()法,则对文档做反序列化可理解为从文档读取数据、用JSON库load()法,以下主要对UI自动化测试数据做拆分,具体安排如下:。

import unittest from parameterized import parameterized,param from selenium import webdriver import time as t 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() 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() 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)

在这里我们展示了将测试数据保存在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() 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.sfdkj.com/18386.html

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片