Python接口自动化测试的步骤
为什么要做自动化
- 降低成本,提前发现问题——如果每次对代码进行更改时,都重复执行一组非常强大的测试套件,可以降低问题出现在产品环境的风险。自动化测试有助于在软件开发生命周期的早期发现错误,从而降低交付故障软件的风险
- 节省时间——虽然初期建立自动化测试需要花费大量的时间和人力,但是一旦自动化测试建立了,您就可以重用这些测试。自动化测试的执行速度明显快于手动测试,不易出错,且节省人力
- 准确性和可靠性——人都是有惰性的,可能有时候会一个疏忽忘记测试,造成1个线上的BUG,而代码不会,只要你写好了就正常运行,会给你准确的数据
功能测试和自动化测试的步骤
功能测试
- 写用例
- 执行测试用例
- 判断用例是否通过,通过对比实际结果和期望结果
- 出具测试报告
自动化测试
import unittest
- 学用例(通过TestCase类)
- 执行用例(1.通过TestSuite类,存储用例,2.TestLoader类找用例,加载用例,存到1的TestSuite中)
- 判断用例是否通过(Assert)
- 出测试结果报告(HtmlTestRunner)
class TestMathMethod(unittest.TestCase): #继承了unittest里面的TestCase专门来写case # 编写测试用例 def test_add_zero(self): pass
# -*- coding: UTF-8 -*- def add(a, b): return a + b def minus(a, b): return a - b def multi(a, b): return a * b def divide(a, b): return a / b
# -*- coding: utf-8 -*- import os import unittest import ddt from test.case.demo.mathfunc import add, minus, multi, divide from utils.readconfig import dataDir @ddt.ddt class TestMathFunc(unittest.TestCase): """Test mathfuc.py""" @classmethod def setUpClass(cls): print('This setUpClass() method only called once.') @classmethod def tearDownClass(cls): print('This tearDownClass() method only called once too.') def setUp(self): print('do something before test.Prepare environment.') def tearDown(self): print('do something after test.Clean up.') @ddt.file_data(os.path.join(dataDir, "demo_test_math.json")) @ddt.unpack def test_add(self, a, b, expected): """Test method add(a, b)""" self.assertEqual(expected, add(a, b)) def test_minus(self): """Test method minus(a, b)""" self.assertEqual(1, minus(3, 2)) def test_multi(self): """Test method multi(a, b)""" self.assertEqual(6, multi(2, 3)) @unittest.skip("demonstrate skip") def test_divide(self): """Test method divide(a, b)""" self.assertEqual(2, divide(6, 3)) self.assertEqual(2.5, divide(5, 2)) if __name__ == '__main__': unittest.main(verbosity=2)