zoukankan      html  css  js  c++  java
  • unittest模块小结

    这次写的是unittest模块的测试用例,属于自动化的门槛,进去了基本算自动化入了门,测试内容很简单,模拟给url推送用户名、密码测试登录功能

    先上代码:

    #login_test.py
    import requests
    class Login():
        def test_login(self,username,password):
            url = "http://localhost:8080/login"
            user_pwd = {}
            user_pwd["mobilephone"] = username
            user_pwd["pwd"] = password
            result = requests.get(url, params=user_pwd)
            list = (result.text).split(",")
            return list[3].split(":")[1].split("}")[0]
    
    if __name__ == '__main__':
        result = Login()
        Return = result.test_login("18688773461","123456")
        print(Return)
    #test_case.py
    from login_test import Login
    from ddt import ddt,unpack,data
    from openpyxl import load_workbook
    import unittest
    @ddt
    class Run_Test(unittest.TestCase):#继承unittest.TestCase
        """
        读取excel文件和cfg文件中数据
        :param xlsx:
        :param ws:
        :return:
        """
        wb = load_workbook("login_data.xlsx")
        ws = wb.get_sheet_by_name("Sheet1")
        list = []
        list1 = []
        for i in range(1, ws.max_row + 1):
            list = []
            for j in range(1, ws.max_column + 1):
                str = ws.cell(i, j).value
                list.append(str)
            list1.append(list)
        wb.close()
        @data(*list1)
        @unpack
        def test_run1(self,Username,Password,Text):
            self.Result = Login()
            Return = self.Result.test_login(Username,Password)
            self.assertEqual(eval(Return),Text)
            #测试用例
    if __name__ == '__main__':
       unittest.main()
    
    #run_test.py
    import unittest,HTMLTestRunnerNew
    import test_case
    class runtest():
        def run_test_1(self):
            # 创建测试套件
            suite = unittest.TestSuite()
            # 找到目录下所有的以test开头的Python文件里面的测试用例
            all_test = unittest.defaultTestLoader.discover('.','test_*.py')
            # 把所有的测试用例添加进来
            for i in all_test:
                suite.addTests(i)
            # 打开一个保存结果的html文件
            fp = open('res_1.html','wb')
            # 生成执行用例的对象
            runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp,title='2019年3月23日作业_测试报告',description='所有测试情况',tester = "桂马")
            # 执行测试套件
            runner.run(suite)
    
    
        def run_test_2(self):
            # 创建测试套件
            suite = unittest.TestSuite()
            # 测试套件中添加测试用例
            loader = unittest.TestLoader()
            suite.addTests(loader.loadTestsFromTestCase(test_case.Run_Test))
            # 打开一个保存结果的html文件
            fp = open('res_2.html', 'wb')
            # 生成执行用例的对象
            runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp, title='2019年3月23日作业_测试报告', description='所有测试情况',tester = "桂马")
            # 执行测试套件
            runner.run(suite)
    
        def run_test_3(self):
            # 创建测试套件
            suite = unittest.TestSuite()
            # 测试套件中添加测试模块
            loader = unittest.TestLoader()
            suite.addTests(loader.loadTestsFromModule(test_case))
            # 打开一个保存结果的html文件
            fp = open('res_3.html', 'wb')
            # 生成执行用例的对象
            runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp, title='2019年3月23日作业_测试报告', description='所有测试情况',tester = "桂马")
            # 执行测试套件
            runner.run(suite)
    if __name__ == '__main__':
        homework = runtest()
        homework.run_test_1()
        homework.run_test_2()
        homework.run_test_3()

    xlsx文件内容如下图:

    注意点:

        1.为了提高代码的可重复利用性,所以最好功能、用例、运行报告分开写,这点最好养成习惯,很重要

        2.模块的命名,为什么要说这个呢,因为这回我在这上面卡了40多分钟,硬是找不到错误,test_case运行一切顺利,但是run_test就是报错,找了半天,最后改了模块名才发现通过了。血的教训,所以一定要记住

        3.功能未做注释是因为比较简单,最后的返回值只不过是二度切割,把返回结果的value切出来而已,也可以不切,断言换成self.assertIn()来做,不过那样不够准确,所以不太推荐

        4.用例添加进测试套件的方法不止我写的这三种,只不过这三种写起来比较简单,更多的网上也有,这里只是做一个参考和笔记

        5.原本test_case中还有setUp()、tearDown()方法,self.Result = Login()也是写在setUp()中的,但是老报错,时间又不够我排查,索性不写了,直接丢case中

        6.最后的创建套件并运行也可以不生成报告,报告不是必要的,只是顺手写上去的,也可以直接TextTestRunner运行完毕直接查看控制台

        7.果然代码还是要常码,unittest模块以前还是很熟练的,有段时间没碰,写起来就磕磕碰碰的了

    备注: 

        2019年3月24日更新代码,使用openpyxl、ddt模块优化test_case模块,使用修改后的HTMLTestRunner模块HTMLTestRunnerNew来美化测试报告页面

  • 相关阅读:
    leetcode第35题--Valid Sudoku
    leetcode 34 Search Insert Position
    leetcode第33题--Search for a Range
    leetcode第32题--Search in Rotated Sorted Array
    leetcode第31题--Longest Valid Parentheses
    leetcode第30题--Next Permutation
    leetcode第29题--Substring with Concatenation of All Words
    leetcode第28题--Divide Two Integers
    leetcode第27题--Implement strStr()
    17_7_7 JDBC存储过程 + 事务
  • 原文地址:https://www.cnblogs.com/keima/p/10581107.html
Copyright © 2011-2022 走看看