记录python接口自动化测试(第二目)

Posted 我是冰霜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录python接口自动化测试(第二目)相关的知识,希望对你有一定的参考价值。

在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo

1.unittest简单用法

# -*-coding:UTF:8-*-

import unittest


class TestMethod(unittest.TestCase):  # 定义一个类,继承自unittest.TestCase
    # 每次执行用例前执行setUp(),可以在这里做一些初始化的工作
    def setUp(self):
        print(\'setUp\')

    # 每次执行用例后执行tearDown
    def tearDown(self):
        print(\'tearDown\')

    def test001(self):  # unittest中的用例必须以test开头
        print(\'test001\')

    def test002(self):
        print(\'test002\')


if __name__ == \'__main__\':
    unittest.main()

运行结果如下:

 如果不想在每次执行用例时都执行一遍setUp()和tearDown(),只要执行一次就好,可以使用类方法代替:

# -*-coding:UTF:8-*-

import unittest


class TestMethod(unittest.TestCase):  # 定义一个类,继承自unittest.TestCase
    # 每次执行用例前执行setUp(),可以在这里做一些初始化的工作
    @classmethod     
    def setUpClass(cls):
        print(\'setUp\\n\')

    # 每次执行用例后执行tearDown
    @classmethod
    def tearDownClass(cls):
        print(\'tearDown\')

    def test001(self):  # unittest中的用例必须以test开头
        print(\'test001\')

    def test002(self):
        print(\'test002\')


if __name__ == \'__main__\':
    unittest.main()

运行结果如下:

 2.接口测试实例

# -*-coding:UTF:8-*-

import unittest
from interface.demo import RunMain   # 从之前封装的文件中,引入RunMain类
import HTMLTestRunner
import json


class TestMethod(unittest.TestCase):    # 定义一个类,继承自unittest.TestCase

    def setUp(self):
        self.run = RunMain()   # 在初始化方法中实例化get/post基类,生成一个实例对象,这样就不需要在每个用例中再进行实例化了

    def test01(self):
        url = \'http://localhost:7001/XXX\'
        data = {
            \'controlSeq\': \'2018118325\'
        }
        r = self.run.run_main(url, \'POST\', data)   # 调用RunMain类中run_main方法
        print(r)
        re = json.loads(r)
        self.assertEqual(re[\'status\'], \'200\', \'测试失败\')
#注意我在进行断言前,先用json库的json.loads()函数对上一步中的返回结果r进行了解码,不然直接调用r[\'status\']时会报错“json.loadsstring indices must be integers”
#原因是,在之前的例子中,为了使显示效果更加直观,对服务器的响应结果利用json.dumps()进行了json格式的编码

def test02(self): url = \'http://localhost:7001/XXX\' data = { "controlSeq": "2018118325" } r = self.run.run_main(url, \'GET\', data) print(r) re = json.loads(r) self.assertEqual(re["status"], \'200\', \'测试失败\') # @unittest.skip(\'test03\') # 使用skip()方法表示跳过用例test03 def test03(self): url = \'http://localhost:7001/XXX\' data = { \'controlSeq\': \'2018118361\', \'seq\': \'2939\', \'type\': \'1\' } r = self.run.run_main(url, \'POST\', data) print(r) # print(type(r)) # 查看返回对象r的类型 re = json.loads(r) # print(type(re)) self.assertEqual(re[\'status\'], \'200\', \'测试失败\') if __name__ == "__main__": unittest.main() #表示执行全部用例

 3.使用TestSuite()来自定义执行case

# -*-coding:UTF:8-*-

import unittest
from interface.demo import RunMain   # 从之前封装的文件中,引入RunMain类
import HTMLTestRunner
import json


class TestMethod(unittest.TestCase):    # 定义一个类,继承自unittest.TestCase

    def setUp(self):
        self.run = RunMain()   # 在初始化方法中实例化get/post基类,生成一个实例对象,这样就不需要在每个用例中再进行实例化了

    def test01(self):
        url = \'http://localhost:7001/XXX\'
        data = {
            \'controlSeq\': \'2018118325\'
        }
        r = self.run.run_main(url, \'POST\', data)   # 调用RunMain类中run_main方法
        print(r)
        re = json.loads(r)
        self.assertEqual(re[\'status\'], \'200\', \'测试失败\')
        # globals()[\'userid\'] = 22   #定义全局变量

    def test02(self):
        # print(userid)   #使用case1中的全局变量,执行时需要全部执行,不能只执行后面的,不然会报错
        url = \'http://localhost:7001/XXX\'
        data = {
            "controlSeq": "2018118325"
        }
        r = self.run.run_main(url, \'GET\', data)
        print(r)
        re = json.loads(r)
        self.assertEqual(re["status"], \'200\', \'测试失败\')

    # @unittest.skip(\'test03\')  # 跳过用例test03
    def test03(self):
        url = \'http://localhost:7001/XXX\'
        data = {
            \'controlSeq\': \'2018118361\',
            \'seq\': \'2939\',
            \'type\': \'1\'
        }
        r = self.run.run_main(url, \'POST\', data)
        print(r)
        # print(type(r)) # 查看返回对象r的类型
        re = json.loads(r)
        # print(type(re))  #查看json对象解码后的类型
        self.assertEqual(re[\'status\'], \'200\', \'测试失败\')


if __name__ == "__main__":    
suite = unittest.TestSuite() # 调用unittest的TestSuite(),理解为管理case的一个容器(测试套件) suite.addTest(TestMethod(\'test01\')) # 向测试套件中添加用例,"TestMethod"是上面定义的类名,"test01"是用例名,一条条地添加 suite.addTest(TestMethod(\'test02\')) suite.addTest(TestMethod(\'test03\'))

    # test_cases = [Update("test_case_001"), Update("test_case_002"), Update("test_case_003"), Update("test_case_004"),
# Update("test_case_005"), Update("test_case_006"), Update("test_case_007"), Update("test_case_008")]
# suite.addTests(test_cases) # 批量添加测试用例
    runner = unittest.TextTestRunner()  
runner.run(suite)
# 执行套件中的用例
此时再执行这个文件,就只会执行添加到测试套件中的case了

但是如果是使用的pycharm来运行脚本,则有几点需要注意,pycharm这里有个坑,困扰了我很久,在第三目中的小总结中说一下

 

以上是关于记录python接口自动化测试(第二目)的主要内容,如果未能解决你的问题,请参考以下文章

Flask 编写http接口api及接口自动化测试

使用python requests库写接口自动化测试--记录学习过程中遇到的坑

接口测试学习-python第八课(数据驱动测试)

python自动化测试怎么将多个依赖数据

接口自动化1.0 python+unittest

python Django接口自动化测试