本文介绍网站登陆功能,未使用ddt思想前每次登陆数据都重新写一遍代码,造成代码冗余,与我们设计初衷相悖。
整篇文章从以下几个方面介绍不同格式的数据怎样利用ddt数据的思想实现登录功能。
·什么是DDT思想
·登录流程
·未使用DDT实现登录功能
·数据脚本在代码中实现DDT
·数据脚本在CSV文件中实现DDT
·数据脚本在json文件中实现DDT
·数据脚本在excel文件中实现DDT
·数据脚本在ddt模块中实现DDT
·登录流程
·未使用DDT实现登录功能
·数据脚本在代码中实现DDT
·数据脚本在CSV文件中实现DDT
·数据脚本在json文件中实现DDT
·数据脚本在excel文件中实现DDT
·数据脚本在ddt模块中实现DDT
DDT思想
数据驱动测试是指使用相同的测试用例,但是每次都使用不同的测试数据,进行的一种测试。这些测试数据,通常来自于外部,如.csv文件,.xsl文件,文本文件,或者来自数据库。数据驱动测试是一种最常见的自动化测试技术,用于在许多不同的输入中验证应用程序。
举个例子:
比如去超时买东西结账的流程,只是买的东西不同,从选购到结算整个流程都是相同的,通过DDT思想可以把买的商品都统一放到一个文件中,统一进行结账操作。
登录流程
1.本机访问地址http://localhost:8888/jpress/user/login
2.输入用户名和密码(错误、正确)
3.点击登录按钮
4.判断是否登录成功
未使用DDT实现登录功能
分别定义两个函数实现登录流程,登录成功和登录失败,测试数据放在函数内部。
如下面代码所示:
from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from time import sleep from selenium import webdriver import pytest class TestUserLogin(object): def setup_class(self): self.driver=webdriver.Chrome() self.driver.get('http://localhost:8888/jpress/user/login') self.driver.maximize_window() #用户名、密码错误 def test_user_logon_username_error(self): #测试数据 username='' pwd='123456' expected='账号不能为空' self.driver.find_element_by_name('user').send_keys(username) self.driver.find_element_by_name('pwd').send_keys(pwd) self.driver.find_element_by_class_name('btn').click() WebDriverWait(self.driver,5).until(EC.alert_is_present()) alert=self.driver.switch_to.alert sleep(3) assert alert.text==expected alert.accept() def test_user_logon_username_pass(self): #测试数据 username='wx1' pwd='123456' expected='用户中心' self.driver.find_element_by_name('user').send_keys(username) self.driver.find_element_by_name('pwd').clear() self.driver.find_element_by_name('pwd').send_keys(pwd) self.driver.find_element_by_class_name('btn').click() WebDriverWait(self.driver,5).until(EC.title_is(expected)) sleep(3) assert self.driver.title==expected self.driver.quit() if __name__ == '__main__': pytest.main() |
数据脚本在代码中
增加如下代码
login_data=[ ('','123456','账号不能为空') , ('wx1','123456','用户中心') ] @pytest.mark.parametrize('username,pwd,expected',login_data) |
1.之前是2个登录用例改写为一个
2.断言通过用户名进行判断
重构完成后代码
from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from time import sleep from selenium import webdriver import pytest class TestUserLogin(object): #测试数据 login_data=[ ('','123456','账号不能为空') , ('wx1','123456','用户中心') ] def setup_class(self): self.driver=webdriver.Chrome() self.driver.get('http://localhost:8888/jpress/user/login') self.driver.maximize_window() #测试用户登录 @pytest.mark.parametrize('username,pwd,expected',login_data) #实现登录 def test_user_logon_username_pass(self,username,pwd,expected): self.driver.find_element_by_name('user').clear() self.driver.find_element_by_name('user').send_keys(username) self.driver.find_element_by_name('pwd').clear() self.driver.find_element_by_name('pwd').send_keys(pwd) self.driver.find_element_by_class_name('btn').click() #断言判断 if username=='': WebDriverWait(self.driver, 5).until(EC.alert_is_present()) alert = self.driver.switch_to.alert sleep(3) assert alert.text == expected alert.accept() else: WebDriverWait(self.driver,5).until(EC.title_is(expected)) sleep(3) assert self.driver.title==expected self.driver.quit() if __name__ == '__main__': pytest.main() |
后面的内容更精彩!
点击下方链接查看完整文章哦~
版权声明:本文出自《51测试天地》第六十期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任