• unittest自动化测试框架


    (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://[服务器ip]: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
            # bool值
            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 = ".\case\web\wukong_crm\"
    # 测试报告路径
    result = dir_name + "\report\"
    
    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()方法。
  • 相关阅读:
    Avoiding React setState() Pitfalls(译)
    rax学习(十):实现微信消息长列表(LongList)之列表扩展
    rax学习(九):实现微信消息长列表(LongList)之配置透出
    rax学习(八):实现微信消息长列表(LongList)之性能优化
    rax学习(七):实现微信消息长列表(LongList)之性能监控
    rax学习(六):实现微信消息长列表(LongList)之业务埋点
    jQuery获取父 兄 子 节点
    css相关
    两端对齐justify
    js页面刷新的几种方法
  • 原文地址:https://www.cnblogs.com/caituotuo/p/14224399.html
Copyright © 2020-2023  润新知