[接口自动化]使用python+unittest+request来完成一个小项目的接口自动化测试

一.接口项目

项目来源于我自学老师自建的一系列接口,名为LJtest。这一系列接口组建成了一个小型的系统,主要功能类似于朋友圈/QQ空间发动态之类的。

如图,查看版本号接口,获取灵感,获取灵感详情这三个接口不需要登录。而用户发表灵感,修改灵感和删除灵感接口则需要登录后进行操作。剩余两个接口则是注册和登录接口。

 

二.接口用例设计和测试

接口文档提供了8个接口,这里我以其中两个接口作为示例来讲解如何进行这些接口的测试。

接口一:查看版本号接口

接口文档如图:

直接展示代码:

import unittest
import requests
import HTMLTestRunner

headers={"Content-Type":"application/json"}

class Test_showversion(unittest.TestCase):

    def setUp(self):
        pass

    def tearDown(self):
        pass
    
    def test_1(self):
        url = 'http://192.144.148.91:2333/showversion'
        response = requests.get(url,headers = headers).json()
        self.assertEqual(response['status'], 200)
        
if __name__ == '__main__':
    
    testunit = unittest.TestSuite() #初始化测试用例集合对象,构建测试套件
    testunit.addTest(Test_showversion("test_1")) #把测试用例加入到测试用力集合中去,将用例加入到检测套件中
    filename = './' +'查看版本号'+'result.html'#重构文件名
    fp = open(filename,'wb')#定义测试报告存放路径
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp)#定义测试报告
    runner.run(testunit)
    fp.close()

代码逻辑:1.导包  2.定制请求头  3.定义一个类集成unittest.TestCase  4.定义测试用例,url,请求方式,请求头非常简单明了。 5.断言,接口文档中返回值里'status'=200

,断言我们判断这个值是不是等于200就行了。最后生成一个非常简易的测试报告。

OK,这个接口非常简单。查询要么成功要么失败,这里不需要传入参数且接口已经被LJ老师更新好了无法设计更多测试用例。

 

接口二:登录接口

登录接口的接口文档如下:

为登录接口设计测试用例:8条用例只有第1条能够登录成功,其他7条应该都会报错。

源码:

import requests
import unittest
from ddt import ddt,data,unpack

headers={"Content-Type":"application/json"}

@ddt
class Test_login(unittest.TestCase):

    def setUp(self):
        pass

    def tearDown(self):
        pass

    @data({"username":"8482592",  "password":"a1234567"},{"username":"8482",  "password":"a1234567"},{"username":"8482592123455",  "password":"a1234567"}
    ,{"username":"84825921",  "password":"a1234567"},{"username":"8482592",  "password":"a123456"},{"username":"8482592",  "password":"a1234567890123456"}
    ,{"username":"848259211",  "password":"a1234567"},{"username":"8482592",  "password":"a12345678"})
    def test_1(self,usefinfo):

        url = 'http://192.144.148.91:2333/login'
        response = requests.post(url,headers = headers,json=usefinfo).json()
        self.assertEqual(response['msg'], '登录成功!')

if __name__ == "__main__":
    unittest.main(verbosity=2)

跑一遍显示的结果如下:

和我们的预期结果相符合,只有第1条用例师OK的,其他用例全部失败(error4条,fail3条)

 

目前还没有把ddt数据驱动和测试报告结合起来,下去研究下ddt测试用例的名称怎么修改,这样就能产出测试报告了。

 

2020.8.14傍晚更新

使用了pytest框架来运行unittest框架写好的测试用例,完全不冲突。生成了详细的测试报告,与期望的1pass7fail结果吻合。报告里面也有每一条测试用例出错的detial。感觉pytest确实要比unittest好用,还需要继续学习。

 

posted @ 2020-08-12 17:04  春夏丶  阅读(392)  评论(0)    收藏  举报