• Python + unittest知识点回顾


    postman

    安装Newman 先安装node.js,把npm添加到环境变量中。
    npm install newman --registry=https://registry.npm.taobao.org
    newman run 拉钩网.postman_collection.json newman-reporter-html


    login登录成功后是不是代表业务流程是对的?
    不是,只是代表login的接口是对的。

    接口测试的维度:
    1.请求参数的边界值
    2.请求参数为空
    3.请求参数数据类型
    4.请求&响应时间的验证
    5.基本的业务流程,业务流程ok,前后端业务场景测试ok

    不需要单独的验证数据库的数据是否正确
    因为客户端向服务端发起请求获取数据,服务端链接到数据库,写SQL语句,然后返回需要的内容给客户端

    500万请求数据,怎么断言数据,服务器会链接SQL语句,把消费的金额进行累计进行断言。


    公司的要求:
    1.发展业务价值
    2.更短的上线时间
    3.更好的软件质量
    4.更少的资源投入
    5.关注用户的行为
    6.倡导零缺陷,做有价值的事

    单元测试unittest

    测试用例 -->testcases
    测试固件 -->准备工作和收尾工作
    测试套件 testsuite-->测试用例集合
    测试执行 testrunner-->测试用例test执行
    测试断言 -->期望结果是断言,实际结果
    测试报告 testreport-->测试用例生成报告

    测试策略
    本轮测试版本,测试场景,回归问题,新增需求等进行测试

    小牛试刀
    class Test():
        def __init__(self,a,b):
            self.a = a
            self.b = b

        def add(self):
            return self.a + self.b

    test = Test(5,6)
    print(test.add())

    测试固件

    import unittest
    class Test(unittest.TestCase):

        @classmethod
        def setUpClass(cls):
            print('前置准备ok')

        # def setUp(self):
        #     print('前置准备ok')

        def test1(self):
            print('TestCase1')

        def test02(self):
            print('TestCase2')

        @classmethod
        def tearDownClass(cls):
            print('收尾工作ok')

        # def tearDown(self):
        #     print('收尾工作ok')

    if __name__ == '__main__':
        unittest.main(verbosity=2)

    测试固件 setUpClass & teardownclass 只执行一次前置和收尾工作

    import unittest
    from selenium import webdriver

    class Baidu(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            cls.driver = webdriver.Chrome()
            cls.driver.get('https://www.baidu.com')
            cls.driver.implicitly_wait(10)
            cls.driver.maximize_window()

        @classmethod
        def tearDownClass(cls):
            cls.driver.quit()

        def test_baidu_news(self):
            """百度链接测试:验证hao123链接测试"""
            self.driver.find_element_by_link_text('hao123').click()
            self.assertEqual(self.driver.current_url,'https://www.hao123.com/')

        def test_baidu_map(self):
            """百度链接测试:验证地图链接测试"""
            self.driver.find_element_by_link_text('地图').click()
            self.assertEqual(self.driver.title,'百度地图')
            self.driver.back()


    if __name__ == '__main__':
        unittest.main(verbosity=2)


    测试套件 -->测试用例的集合
    addtest -->让用例有顺序的执行
    测试用例执行顺序 addtest 添加&删除用户举例
    按测试类来执行 makeSuite()
    加载测试类 testloader
    按照测试模块来执行

    import unittest
    from selenium import webdriver

    class Baidu(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            cls.driver = webdriver.Chrome()
            cls.driver.get('https://www.baidu.com')
            cls.driver.implicitly_wait(10)
            cls.driver.maximize_window()

        @classmethod
        def tearDownClass(cls):
            cls.driver.quit()

        def test_baidu_news(self):
            """百度链接测试:验证hao123链接测试"""
            self.driver.find_element_by_link_text('hao123').click()
            self.assertEqual(self.driver.current_url,'https://www.hao123.com/')
            self.driver.back()


        def test_baidu_map(self):
            """百度链接测试:验证地图链接测试"""
            self.driver.find_element_by_link_text('地图').click()
            self.assertEqual(self.driver.title,'百度地图')
            self.driver.back()

        def test_baidu_text(self):
            """百度输入框测试:验证输入框文本测试"""
            self.driver.find_element_by_id('kw').send_keys('selenium')
            self.driver.find_element_by_id('su').click()
            self.assertEqual(self.driver.title,'百度搜索_selenium')
            self.driver.back()
            


    if __name__ == '__main__':
        suite = unittest.TestSuite()
        suite.addTest(Baidu('test_baidu_news'))
        suite.addTest(Baidu('test_baidu_map'))
        suite.addTest(Baidu('test_baidu_text'))
        unittest.TextTestRunner(verbosity=2).run(suite)


    按照测试类来执行测试用例
        
    import unittest
    from time import sleep
    from selenium import webdriver
    import HTMLTestRunner
    import time,os

    def add(a,b):
        return a-b

    class BaiduTest(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            cls.driver = webdriver.Chrome()
            cls.driver.get('https://www.baidu.com')
            cls.driver.implicitly_wait(10)
            cls.driver.maximize_window()

        @classmethod
        def tearDownClass(cls):
            cls.driver.quit()

        @unittest.skip('该功能已经取消,忽略该测试用例的执行')
        def test_baidu_news(self):
            """百度链接测试:验证hao123链接测试"""
            self.driver.find_element_by_link_text('hao123').click()
            self.assertEqual(self.driver.current_url,'https://www.hao123.com/')
            self.driver.back()
            sleep(3)

        @unittest.skipIf('5<3','测试用例执行')
        def test_baidu_map(self):
            """百度链接测试:验证地图链接测试"""
            self.driver.find_element_by_link_text('地图').click()
            self.assertEqual(self.driver.title,'百度地图')
            self.driver.back()

        #期望它失败
        @unittest.expectedFailure
        def test_001(self):
            self.assertEqual(add(5,4),2)

        def test_baidu_text(self):
            """百度输入框测试:验证输入框文本测试"""
            sleep(3)
            self.driver.find_element_by_id('kw').send_keys('selenium')
            self.driver.find_element_by_id('su').click()
            self.assertIn('selenium','百度搜索_selenium',msg='测试ok')
            self.driver.back()

        def test_baidu_edit(self):
            '''百度输入框测试:验证百度输入框是否可编辑'''
            sleep(3)
            so = self.driver.find_element_by_id('kw')
            self.assertTrue(so.is_enabled())

        @staticmethod
        def suite():
            suite = unittest.TestSuite(unittest.makeSuite(BaiduTest))
            # suite = unittest.TestLoader().loadTestsFromTestCase(BaiduTest) #从class类中加载
            # suite = unittest.TestLoader().loadTestsFromModule('Requests_test.py') #从模块中加载
            return suite

        def getNowtime(self):
            return time.strftime('%Y_%m_%d_%H_%M_%s')

        def Main(self):
            suite = unittest.defaultTestLoader.discover(
                start_dir=os.path.dirname(__file__),
                pattern=None,
                top_level_dir=None)
            # suite = unittest.TestLoader().discover(
            #     start_dir = None,
            #     pattern = None,
            #     top_level_dir = None
            # )
            return suite

        def Run(self):
            fp = os.path.join(os.path.dirname(__file__),'report',getNowtime +'test_repoet.html')
            runner = HTMLTestRunner.HTMLTestRunner(
                stream=open(fp,'wb'),
                title='接口自动化测试',
                description='windows7系统,chrome浏览器').run(Main())
            



    if __name__ == '__main__':
        # suite = unittest.TestSuite(unittest.makeSuite(BaiduTest))
        # suite.addTest(BaiduTest)
        # unittest.TextTestRunner(verbosity=2).run(BaiduTest.suite())
        # unittest.main(verbosity=2)
        Run()

    测试代码覆盖率的统计
    pip install coverage

    coverage run test*.py 
    执行test开头的文件
  • 相关阅读:
    平衡二叉查找树——AVL树
    Java 输入输出(一)——流
    C++获取系统当前时间(精确到微秒)
    C++ STL中哈希表 hash_map介绍
    ubuntu下面编译libuv
    linux使用select实现精确定时器详解
    .dll,.lib,.def 和 .exp文件
    没有core文件时候如何定位segment/core dump
    C++中string、char *、char[]的转换
    map自定义结构体作为key
  • 原文地址:https://www.cnblogs.com/Teachertao/p/12304029.html
Copyright © 2020-2023  润新知