我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。
上几篇我们讨论了元素的定位方法、操作方法以及一些特殊元素的操作。
在实际的测试项目组中每个模块会写多条案例,如第一条用例那里我们的登录。登录的话就可以有多条案例。那我们怎么写才能更方便呢?python有没有自带的框架能够使用呢?
答案是肯定的。使用unittest来解决。
还是以此网站来举例:Swag Labs
1、unittest基本结构
如下代码所示:
class LoginTest(unittest.TestCase):def setUp(self):self.driver = driverfunc()print("登录测试开始")#输入正确的密码登录成功测试def test_login_Y(self):driver = self.driverusername = "standard_user"password = "secret_sauce"print("登录的用户名是:%s,密码是:%s"%(username,password))#打开浏览器,并最大化driver.get("https://www.saucedemo.com/")driver.maximize_window()time.sleep(3)#输入用户名,driver.find_element_by_name("user-name").send_keys(username) # by name 定位#输入密码driver.find_element_by_name("password").send_keys(password) # by name 定位#点击登录按钮driver.find_element_by_id("login-button").click() # by ID 定位time.sleep(3)#加入断言 //*[@id="header_container"]/div[1]/div[2]/div# 验证标题显示:Swag LabsUIResult = driver.find_element_by_xpath('//*[@id="header_container"]/div[2]/span').textself.assertEqual("Products", UIResult, "密码正确登录验证失败,fail")def tearDown(self): #浏览器退出self.driver.quit()print("登录测试结束")if __name__ =='__main__':unittest.main()
我们上面的代码已经使用了unitest。
unittest 即单元测试,单元测试负责对最小的软件设计单元(模块)进行验证。有时候也叫白盒测试。这里unittest指单元测试框架,是python语言自带的。
基本结构:
class LoginTest(unittest.TestCase): #以登录为例这里写的类
def setUp(self): #测试用例执行前的初始化工作
self.driver = driverfunc()
print("登录测试开始")
#实际的测试用例,每个模块一条用例写一个函数
def test_login_Y(self):
driver = self.driver
xxxx,下面一般是断言
self.assertEqual("Products", UIResult, "密码正确登录验证失败,fail")
def tearDown(self): #与初始化工作相对应,执行一条用例后处理
self.driver.quit()
print("登录测试结束")
2、多条用例的执行
现在加入我用写了一条登录失败的用例,要怎么写呢?聪明的你可能会想到在写一个函数。如下即是我们新增的案例。
# 输入错误的密码登录失败测试def test_login_N(self):driver = self.driverusername = "standard_user"password = "secret_NG"print("登录的用户名是:%s,密码是:%s" % (username, password))# 打开浏览器,并最大化driver.get("https://www.saucedemo.com/")driver.maximize_window()time.sleep(3)# 输入用户名,driver.find_element_by_name("user-name").send_keys(username) # by name 定位# 输入密码driver.find_element_by_name("password").send_keys(password) # by name 定位# 点击登录按钮driver.find_element_by_id("login-button").click() # by ID 定位time.sleep(3)# 加入断言 //*[@id="header_container"]/div[1]/div[2]/div# 验证有报错显示:UIResult = driver.find_element_by_xpath('//*[@id="login_button_container"]/div/form/div[3]/h3').textself.assertEqual("Epic sadface: Username and password do not match any user in this service", UIResult, "密码错误登录验证失败,fail")
执行我们整个脚本文件:login.py
检查执行的结果,我们确认执行了两条的测试案例,并且都是成功的。如下图:
这个是为什么呢?因为unittest 提供了main()方法,使用它可以方便地将一个单元测试模块变成可以直接运行的测试脚本。main()方法使用TestLoader 类来搜索所包含在该模块中以test命名开通的测试方法,并自动执行它们。即:
if __name__ =='__main__':
unittest.main()
以上就是unittest 一个简单的理解。
每天进步一点点,加油!