参数化数据是指在测试中使用具有不同值的数据来替换固定的数据或值。这使得测试能够更全面地覆盖不同的情况和场景 。@parameterized.parameterized 是一个用于生成参数化测试的装饰器,用于为测试函数传入不同的参数。
环境搭建:
需要配置WebTours网站
安装 nose_parameterized-0.6.0-py2.py3-none-any.whl 插件
pip install nose_parameterized-0.6.0-py2.py3-none-any.whl
使用data传参
代码实现:
# 导入包
from selenium import webdriver
from selenium.webdriver.support.select import Select
from time import sleep
import unittest
import parameterized
driver = None
data = [['zhsan1','1'],['zhsan2','2'],['zhsan3','3']]
class Reg(unittest.TestCase):
@classmethod
def setUpClass(cls):
global driver
driver = webdriver.Chrome()
@classmethod
def tearDownClass(cls):
driver.quit()
def setUp(self):
driver.get("http://127.0.0.1:1080/WebTours/")
sleep(3)
@parameterized.parameterized.expand(data,)
def testRegister(self,yhm,mm):
u'''注册账号'''
# driver.get("http://127.0.0.1:1080/WebTours/")
# sleep(1)
driver.switch_to.default_content()
driver.switch_to.frame("body")
driver.switch_to.frame("info")
driver.find_element_by_link_text("sign up now").click()
sleep(3)
# 跳转页面,还是需要切换框架
driver.switch_to.default_content()
driver.switch_to.frame("body")
driver.switch_to.frame("info")
driver.find_element_by_name("username").send_keys(yhm)
driver.find_element_by_name("password").send_keys(mm)
driver.find_element_by_name("passwordConfirm").send_keys(mm)
driver.find_element_by_name("register").click()
sleep(3)
driver.switch_to.default_content()
driver.switch_to.frame("body")
driver.switch_to.frame("info")
expect = "Thank you, "+yhm
actual = driver.find_element_by_tag_name("body").text
assert expect in actual,"实际结果:"+actual
if __name__=="__main__":
# verbosity=2 显示详细信息,可以省略,测试信息不详细
unittest.main(verbosity=2)
在上述示例中,
@parameterized.parameterized.expand
装饰器传入了一个参数列表,每个元组表示一个测试用例,每个元组中的参数会依次传入到被装饰的测试函数testRegister中进行测试。运行此测试用例时,会依次执行三次测试,分别是对['zhsan1','1'],['zhsan2','2'],['zhsan3','3']的测试,断言结果是否等于预期值。
使用文本文件进行传参
代码实现
# 导入包
from selenium import webdriver
from selenium.webdriver.support.select import Select
from time import sleep
import unittest
import parameterized
driver = None
file = open(r"user.txt")
data = []
for row in file:
t = row.split()
data.append(t)
class Reg(unittest.TestCase):
@classmethod
def setUpClass(cls):
global driver
driver = webdriver.Chrome()
@classmethod
def tearDownClass(cls):
driver.quit()
def setUp(self):
driver.get("http://127.0.0.1:1080/WebTours/")
sleep(3)
@parameterized.parameterized.expand(data)
def testRegister(self,yhm,mm):
u'''注册账号'''
# driver.get("http://127.0.0.1:1080/WebTours/")
# sleep(1)
driver.switch_to.default_content()
driver.switch_to.frame("body")
driver.switch_to.frame("info")
driver.find_element_by_link_text("sign up now").click()
sleep(3)
# 跳转页面,还是需要切换框架
driver.switch_to.default_content()
driver.switch_to.frame("body")
driver.switch_to.frame("info")
driver.find_element_by_name("username").send_keys(yhm)
driver.find_element_by_name("password").send_keys(mm)
driver.find_element_by_name("passwordConfirm").send_keys(mm)
driver.find_element_by_name("register").click()
sleep(3)
driver.switch_to.default_content()
driver.switch_to.frame("body")
driver.switch_to.frame("info")
expect = "Thank you, "+yhm
actual = driver.find_element_by_tag_name("body").text
assert expect in actual,"实际结果:"+actual
if __name__=="__main__":
# verbosity=2 显示详细信息,可以省略,测试信息不详细
unittest.main(verbosity=2)
在上述示例中,将文本文件读取存到data数据中,再由
@parameterized.parameterized.expand
装饰器传入data,每个元组表示一个测试用例,每个元组中的参数会依次传入到被装饰的测试函数testRegister中进行测试。运行此测试用例时,会依次执行三次测试,分别是对data中的数据的测试,断言结果是否等于预期值。