unittest模块小结

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

先上代码:

#login_test.py
import requests
class Login():
    def test_login(self,username,password):
        url = "http://47.107.168.87:8080/futureloan/mvc/api/member/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
import HTMLTestRunner
import unittest

class Run_Test(unittest.TestCase):#继承unittest.TestCase
    # def setUp(self):
    #     # 每个测试用例执行之前做操作
    #     print("用例执行开始")
    #     self.Result = Login()
    # def tearDown(self):
    #     #每个测试用例执行之后做操作
    #     print("用例执行结束")
    def test_run1(self):
        self.Result = Login()
        Return = self.Result.test_login(" ","123456")
        self.assertEqual(eval(Return),"手机号不能为空")
        #测试用例1
    def test_run2(self):
        self.Result = Login()
        Return = self.Result.test_login("18688773467"," ")
        self.assertEqual(eval(Return),"密码不能为空")
        #测试用例2
    def test_run3(self):
        self.Result = Login()
        Return = self.Result.test_login("18688773461","123456")
        self.assertEqual(eval(Return),"用户名或密码错误")
        #测试用例3
    def test_run4(self):
        self.Result = Login()
        Return = self.Result.test_login("18688773467","123456")
        self.assertEqual(eval(Return),"登录成功")
        #测试用例4
if __name__ == '__main__':
   unittest.main()
#run_test.py
import unittest,HTMLTestRunner
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 = HTMLTestRunner.HTMLTestRunner(stream=fp,title='all_tests',description='所有测试情况')
        # 执行测试套件
        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 = HTMLTestRunner.HTMLTestRunner(stream=fp, title='all_tests', description='所有测试情况')
        # 执行测试套件
        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 = HTMLTestRunner.HTMLTestRunner(stream=fp, title='all_tests', description='所有测试情况')
        # 执行测试套件
        runner.run(suite)
        # runner = unittest.TextTestRunner()
        # runner.run(suite)
if __name__ == '__main__':
    homework = runtest()
    homework.run_test_1()
    homework.run_test_2()
    homework.run_test_3()

注意点:

    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模块以前还是很熟练的,有段时间没碰,写起来就磕磕碰碰的了

猜你喜欢

转载自www.cnblogs.com/keima/p/10581107.html
今日推荐