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)
原文地址:https://www.cnblogs.com/xinhua19/p/14530858.html