文章目录
一、unittest之执行顺序
举例:
import unittest
class Test(unittest.TestCase):
def setUp(self):
print("start!")
def tearDown(self):
print("end!")
def test01(self): # 仅执行test开头用例
print("执行测试用例01")
def test03(self):
print("执行测试用例03")
def test02(self):
print("执行测试用例02")
if __name__ == "__main__":
unittest.main()
结果:
start!
执行测试用例01
end!
start!
执行测试用例02
end!
start!
执行测试用例03
end!
一、unittest之装饰器
①装饰器
- 用setUp与setUpClass区别
setup():每个测试case运行前运行
teardown():每个测试case运行完后执行
setUpClass():必须使用@classmethod 装饰器,所有case运行前只运行一次
tearDownClass():必须使用@classmethod装饰器,所有case运行完后只运行一次
- @是修饰符,classmethod是python里的类方法
②执行顺序
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("start!")
@classmethod
def tearDownClass(cls):
print("end!")
def test01(self):
print("执行测试用例01")
def test03(self):
print("执行测试用例03")
def test02(self):
print("执行测试用例02")
if __name__ == "__main__":
unittest.main()
结果:
start!
end!
进程已结束,退出代码为 0
执行测试用例01
执行测试用例02
执行测试用例03
③unittest装饰器
unittest本身也带有装饰器unittest.skip(),专门用于跳过testcase的装饰器,其用法如下:
@unittest.skip(reason), skip装饰器:直接跳过装饰下的testcase,reason用来说明原因,下同。
@unittest.skipIf(condition,reason), skipIf装饰器:condition条件为True时,跳过装饰下的testcase,计入skip的testcase执行次数。
@unittest.skipUnless(condition,reason),skipUnless装饰器:condition条件为False时,跳过装饰下的testcase,计入skip的testcase执行次数。
@unittest.expectedFailure(), expectedFailure装饰器:执行装饰下的testcase,执行失败则跳过该testcase,计入expected下成败的testcase次数。
一、unittest之断言
- .assertEqual(self, first, second,msg=None)
–判断两个参数相等:first == second - .assertNotEqual(self, first, second,msg=None)
–判断两个参数不相等:first != second - .assertIn(self, member, container,msg=None)
–判断是字符串是否包含:member in container - .assertNotIn(self, member,container, msg=None)
–判断是字符串是否不包含:member not in container - .assertTrue(self, expr, msg=None)
–判断是否为真:expr is True - .assertFalse(self, expr, msg=None)
–判断是否为假:expr is False - .assertIsNone(self, obj, msg=None)
–判断是否为None:objis None - .assertIsNotNone(self, obj,msg=None)
–判断是否不为None:obj is not None
一、unittest之模块导入
以登录博客园为案例https://passport.cnblogs.com/user/signin
一、登录方法封装
把登录写成一个登录类,里面写个登录的方法,保存文件为login_public.py
'''
登录博客园的类及方法
'''
class Login_Blog():
'''登录类封装'''
def __init__(self, driver):
'''初始化driver参数'''
self.driver = driver
def input_user(self, username):
'''输入用户名'''
self.driver.find_element_by_id("mat-input-0").clear()
self.driver.find_element_by_id("mat-input-0").send_keys(username)
def input_psw(self, psw):
'''输入密码'''
self.driver.find_element_by_id("mat-input-1").clear()
self.driver.find_element_by_id("mat-input-1").send_keys(psw)
def click_button(self):
'''点击登录按钮'''
self.driver.find_element_by_xpath("//*[text()=' 登录 ']").click()
def login(self, username, psw):
'''登录公共方法'''
self.input_user(username)
self.input_psw(psw)
self.click_button()
二、调用方法
from selenium import webdriver
import unittest
from time import sleep
from login_public import Login_Blog
class TestLogin(unittest.TestCase):
def setUp(self):
url = "https://passport.cnblogs.com/user/signin"
self.driver = webdriver.Chrome()
self.driver.get(url)
def tearDown(self):
self.driver.quit()
def test_login(self):
# 调用登录类里面的login方法
Login_Blog(self.driver).login("Hello_Now", "密码")
sleep(3)
# 点击头像
self.driver.find_element_by_id("user_icon").click()
myurl = self.driver.current_url
print(myurl)
self.assertEqual(myurl,"https://home.cnblogs.com/u/hello-now",msg="登录失败")
if __name__ == "__main__":
unittest.main()
一、unittest之批量执行
diascover加载测试用例:
1.discover方法里面有三个参数:
-case_dir:这个是待执行用例的目录。
-pattern:这个是匹配脚本名称的规则,test*.py意思是匹配test开头的所有脚本。
-top_level_dir:这个是顶层目录的名称,一般默认等于None就行了。
2.discover加载到的用例是一个list集合,需要重新写入到一个list对象testcase里,这样就可以用unittest里面的TextTestRunner这里类的run方法去执行。
import unittest
import os
import time
# import HTMLTestRunner
# 用例路径
case_path = os.path.join(os.getcwd(),"Cases")
# 执行什么用例:test开头的py脚本
yongli = "test*.py"
# 报告存放路径
report_path = os.path.join(os.getcwd(),"report")
def all_case():
rong = unittest.defaultTestLoader.discover(case_path,yongli,top_level_dir=None)
print(rong)
return rong
if __name__ == '__main__':
runner = unittest.TextTestRunner()
runner.run(all_case())
一、unittest之HTMLTestRunner测试报告
①下载HTMLTestRunner:地址
②放入python安装目录下:
③代码:
import unittest
import os
import time
import HTMLTestRunner
# 用例路径
case_path = os.path.join(os.getcwd(),"Cases")
# 执行什么用例:test开头的py脚本
yongli = "test*.py"
# 报告存放路径
report_path = os.path.join(os.getcwd(),"report")
def all_case():
rong = unittest.defaultTestLoader.discover(case_path,yongli,top_level_dir=None)
print(rong)
return rong
if __name__ == '__main__':
# 获取当前时间
nowtime = time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))
# html报告文件路径
report_abspath = os.path.join(report_path,"测试报告_"+nowtime+".html")
# 打开文件,将结果写入文件中
fp = open(report_abspath, "wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=r'自动化测试报告:', description=r'用例执行情况:')
# 4、调用all_case函数返回值
runner.run(all_case())
fp.close()
④样式展示: