在Web自动化测试中,我们需要把测试使用到的数据分离到文件中,如果单纯的写在我们的测试模块里面,不是一个好的设计,所以不管是什么类型的自动化测试,都是需要把数据分离出来的。
当然分离到具体的文件里面,文件的形式其实有很多的,这里主要说明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('[email protected]','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": "[email protected]","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)
YAML文件
下面演示把测试数据存储到YAML文件里面,分离出来的文件内容为:
username: ""
password: ""
text: "请输入邮箱名"
---
username: "srtSA"
password: "saert"
text: "您输入的邮箱名格式不正确"
---
username: "[email protected]"
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)
上文详细的总结了Web自动化测试中,我们可以把使用到的测试数据分离到JSON文件和YAML的文件,这样达到了数据的分离,目的是让测试更加简单和高效。
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
只有经历过痛苦的洗礼,才能拥有真正的坚强;只有付出足够的努力,才能追寻到属于自己的辉煌。无论风雨如何,奋斗不息,梦想必将破浪前行!
只有勇往直前、不畏困难的人,才能驾驭命运的舵,航向成功的彼岸。相信自己,坚持努力,每一次奋斗都会让你距离梦想更近一步,终将收获属于自己的辉煌与荣耀!
只有拼尽全力,才能看到梦想的远方;只有奋斗不息,才能实现自己的价值;只有坚持不懈,才能迎接成功的曙光。相信自己,勇往直前,无所不能!