unittest框架
(1)unittest框架设计思路
- case:测试用例。
- public:将一些公共的业务封装成类和方法。
- report:测试报告。
- testrunner:批量运行。
(2)setUp、tearDown、测试函数
- setUp()方法,初始化,最先执行,比如:每次都会打开浏览器,打印开始执行测试的时间。
- tearDown()方法,最后执行,比如:每次执行完成都会截图,打印执行结束的时间。
- 测试函数 ,第二执行,函数名必须以test开头。
from selenium import webdriver
import unittest
import os
import time
from public.wukong_crm.login import Login
class TestIndex(unittest.TestCase):
def setUp(self):
""" setUp方法,初始化 最先执行,每次都会打开页面 """
self.driver = webdriver.Chrome()
# 打开悟空CRM系统
self.driver.get("http://101.133.169.100:8088/")
self.driver.maximize_window()
time.sleep(3)
# 打印用例开始执行的时间
print("start_time:" + time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(time.time())))
def tearDown(self):
""" 最后执行,每次执行完成都会截图 """
file_dir = "D:/Desktop/Testman_Study/图库/screen/"
# 如果找不到文件夹,则新建一个文件夹
if not os.path.exists(file_dir):
os.makedirs(os.path.join("D:/", "Desktop", "Testman_Study", "图库", "screen"))
# 打印执行完成的时间
print("end_time:" + time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(time.time())))
# 截图命名以时间戳命名
screen_name = file_dir + time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(time.time())) + ".png"
self.driver.get_screenshot_as_file(screen_name)
self.driver.quit()
def testIndex01_01(self):
"""WKCRM_001. 验证导航文案是否显示正常"""
# 调用login方法,登录悟空CRM系统
Login(self.driver).login()
# 获取导航栏各个控件的文本信息
# 办公
text_bg = self.driver.find_element_by_xpath("//a[@class="nav-item router-link-active"]/div").text
# 客户管理
text_khgl = self.driver.find_element_by_xpath("//*[@id="app"]/section/header/div/div/div/a[2]/div").text
# 商业智能
text_syzn = self.driver.find_element_by_xpath("//*[@id="app"]/section/header/div/div/div/a[3]/div").text
# 项目管理
text_xmgl = self.driver.find_element_by_xpath("//*[@id="app"]/section/header/div/div/div/a[4]/div").text
# 开通授权
text_ktsq = self.driver.find_element_by_xpath("//*[@id="app"]/section/header/div/span[1]/button").text
# 带有用户名的头像
text_tx = self.driver.find_element_by_xpath(
"//*[@id="app"]/section/header/div/span[2]/div[2]/div/div/div/div").text
# 断言结果,进行文本信息的比对
self.assertEqual("办公", text_bg)
self.assertEqual("客户管理", text_khgl)
self.assertEqual("商业智能", text_syzn)
self.assertEqual("项目管理", text_xmgl)
self.assertEqual("开通授权", text_ktsq)
self.assertEqual("hs", text_tx)
if __name__ == "__main__":
unittest.main()
(3)断言机制、常用断言方法
# 断言方法一:assertEqual、assertNotEqual
self.assertEqual("办公", text_bg)
self.assertNotEqual("办公管理", text_bg)
# 断言方法二:
# assertIn、assertNotIn
# 表示包含,类似于模糊查询
self.assertIn("开通", text_ktsq)
# 断言方法三:assertTrue、assertFalse
self.assertTrue(
self.driver.find_element_by_xpath("//a[@class="nav-item router-link-active"]/div").is_displayed())
self.assertFalse(
self.driver.find_element_by_xpath("//a[@class="nav-item router-link-active"]/div").is_displayed())
# 断言方法四:
if username.text == "":
print("不等于")
else:
print("不等于")
self.driver.find_element_by_id("蔡坨坨")
(4)批量执行自动化测试用例、html美化报告生成
testrunner.py
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/16 22:41
import unittest
import time
import os
import sys
from report import HTMLTestRunner
# 获取当前.py文件的绝对路径,并进行路径分割
# dir_name:目录路径
# file_name:文件名称
dir_name, file_name = os.path.split(os.path.abspath(sys.argv[0]))
print(dir_name, file_name)
# 测试用例路径
case_path = ".casewebwukong_crm"
# 测试报告路径
result = dir_name + "eport"
def create_suite():
""" 定义单元测试容器 """
test_unit = unittest.TestSuite() # TestSuite() 测试套件
# 定义搜索用例文件的方法
# 比如:web/yunshang下的所有.py文件
discover = unittest.defaultTestLoader.discover(case_path, pattern="*.py", top_level_dir=None)
# 将测试用例加入测试容器中
for test_suite in discover:
for case_name in test_suite:
test_unit.addTest(case_name)
return test_unit
# 调用create_suite()方法
test_case = create_suite()
# 获取系统当前时间
now_time = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(time.time()))
day = time.strftime("%Y-%m-%d", time.localtime(time.time()))
# 定义测试报告路径
result_dir = result + day
def report():
"""定义一个测试报告生成方法"""
file_name = result_dir + "" + now_time + "_result.html"
fp = open(file_name, "wb")
# 定义测试报告
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title="测试报告", description="执行情况")
# 执行测试用例
runner.run(test_case)
# 关闭报告文件
fp.close()
# 检验文件夹路径是否存在
if os.path.exists(result_dir):
# 调用report()方法
report()
else:
# 创建测试报告文件夹
os.mkdir(result_dir)
report()
HTMLTestRunner.py美化html测试报告
(5)CRM项目自动化测试
. 代表通过
F 代表未通过
E 表示程序错误
unittest框架总结
- 测试类必须继承unittest.TestCase。
- 测试函数必须以test开头。
- 测试类必须有unittest.main()方法。