使用unittest测试框架并集成Airtest测试报告

 

1.将测试需要的所有步骤集中到一个class,例:

class Test(object):
    '''
    登录租户使用,需要浏览器显示书签并且triones-web在书签栏中
    浏览器有账号密码自动填充
    登录账号在乘法云Finance(克隆)租户中
    '''
 
    def test001(self):
        t = 0
        #测试内容
        return t
 
    '''
    测试录入凭证使用,可在登录之后调用
    '''
 
    def test002(self, account_code):
        t = 0
        #测试内容
        return t

2.在与项目同名py文件中引入unittest

import time
from airtest.core.api import *
import sys
import unittest
import HTMLTestRunner
from main import Test
def custom_resize_method(w, h, sch_resolution, src_resolution):
    return int(w), int(h)
 
# 替换默认的RESIZE_METHOD
ST.RESIZE_METHOD = custom_resize_method
ST.THRESHOLD_STRICT = 0.9  # assert_exists语句的默认阈值,一般比THRESHOLD更高一些
ST.THRESHOLD = 0.80  # 其他语句的默认阈值
auto_setup(__file__)
# 引入unittest
class fs_finance(unittest.TestCase):
    def __init__(self, methodName='runTest'):
        super(fs_finance, self).__init__(methodName)
 
    @staticmethod
    def parametrize(testcase_klass):
        testloader = unittest.TestLoader()
        testnames = testloader.getTestCaseNames(testcase_klass)
        tesenames_add = [
            'test001',
            'test001'
        ]
        print(testnames)
        suite = unittest.TestSuite()
        for name in testnames:
            suite.addTest(testcase_klass(name))
        return suite
#增加测试用例
class Testadd(fs_finance):
    # 这里的装饰器@classmethod必须有,标识为一个类方法
    @classmethod 
    def setUpClass(self):
        """setUpClass为类的初始化方法,在整个类运行前执行只执行一次"""
        pass
 
    def setUp(self):
        """为测试方法的初始化,每个case运行前执行一次"""
        pass
 
    def tearDown(self):
        """清理函数,和setUp类似,每个case执行后执行一次"""
        pass
 
    @classmethod
    def tearDownClass(cls):
        """和setUpclass类似,在调用整个类测试方法完成后执行一次"""
        pass
 
    #测试用例1
    def test001(self):
        """test001,这里的字会展示到测试报告的'用例集/测试用例'列"""
        Test().test001()
        self.assertEqual(result, 0)
 
    #测试用例2
    def test002(self):
        """test002"""
        result = Test().test002()
        self.assertEqual(result, 0)
 
class Test001(object):
    # 替换默认的RESIZE_METHOD
    def test(self):
        suite = unittest.TestSuite()
        with open('./report/test_{}.html'.format(time.strftime('%Y%m%d%H%M')), 'wb') as fp:
            runner = HTMLTestRunner.HTMLTestReportCN(
                stream=fp,
                verbosity=2,
                title=u'自动化测试报告',
                description='详细测试用例结果'# 不传默认为空
                tester=u'test'
            )
            runner.run(suite)
        fp.close()
 
Test001().test()

3.将下面的HTMLTestRunner.py复制到测试项目目录下与项目同名py文件同级

HTMLTestRunner.py

4.airtest的生成报告的命令需要指定log.html的路径 

          --outfile . eportlog.html

原文地址:https://www.cnblogs.com/7047-zfy/p/13535489.html