Django入门(二)——web接口与自动化测试by虫师

一、单元测试——使用unittest框架

单元测试:不仅用于程序测试,同样可适用于UI自动化测试(Selenium)、接口自动化测试(requests)、移动APP测试(Appium)。

1、写一个简单计算器caculator.py:

class calculator:
    def __init__(self, a, b):
        self.a = int(a)
        self.b = int(b)

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

    def sub(self):
        return self.a - self.b

    def mul(self):
        return self.a * self.b

    def div(self):
        return self.a / self.b

2、测试用例:
其中,
setUp:用例的前置条件,相当于初始化
tearDown:用例执行完之后的动作
unittest每个方法前面要加test_

在主程序中,新建一个测试套件suite,使用addTest方法新增测试用例。最后,创建runner对象,运行测试套件。

import unittest
from calculator import calculator


class ModuleTest(unittest.TestCase):
    def setUp(self):
        self.cal = calculator(8,4)

    def tearDown(self):
        pass

    def test_add(self):
        result = self.cal.add()
        self.assertEqual(result, 12)

    def test_sub(self):
        result = self.cal.sub()
        self.assertEqual(result, 4)

    def test_mul(self):
        result = self.cal.mul()
        self.assertEqual(result, 32)

    def test_div(self):
        result = self.cal.div()
        self.assertEqual(result, 3)





if __name__=="__main__":
    suite = unittest.TestSuite()
    suite.addTest(ModuleTest("test_add"))
    suite.addTest(ModuleTest("test_sub"))
    suite.addTest(ModuleTest("test_mul"))
    suite.addTest(ModuleTest("test_div"))

    runner = unittest.TextTestRunner()
    runner.run(suite)

二、Django自带测试

Django自带的单元测试类django.test.TestCase继承自unittest.TestCase。
每个应用下面都有一个tests.py测试文件。

下面是测试上一节编写的,签到系统功能。
使用302是因为登录后会跳转even_mange/

class LoginActionTest(TestCase):
    def setUp(self):
        user = User.objects.get(username="admin")
        self.assertEqual(user.username, 'admin')
        self.assertEqual(user.email, '[email protected]')
    def test_login_action_username_password_null(self):
        '''用户名密码为空'''
        test_data = {'username': '', 'password': ''}
        response = self.client.post('/login_action/', data=test_data)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(b"username or password error!", response.content)

    def test_login_action_username_password_error(self):
        '''用户名密码错误'''
        test_data = {'username': 'asdasda', 'password': 'asdasdadaads'}

        response = self.client.post('/login_action/', data=test_data)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(b"username or password error!", response.content)

    def test_login_action_success(self):
        test_data = {'username': 'admin', 'password': 'admin'}
        response = self.client.post('/login_action/', data = test_data)
        self.assertEqual(response.status_code, 302)

你可能感兴趣的:(Python)