unittest框架

unittest框架[Python基础]

(1)unittest框架设计思路

  1. case:测试用例。
  2. public:将一些公共的业务封装成类和方法。
  3. report:测试报告。
  4. 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())) + ".jpg"

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框架总结

  1. 测试类必须继承unittest.TestCase。
  2. 测试函数必须以test开头。
  3. 测试类必须有unittest.main()方法。

以上是 unittest框架 的全部内容, 来源链接: utcz.com/z/537682.html

回到顶部