Python+requests+unittest执行接口自动化测试详情

这篇文章主要介绍了Python+requests+unittest执行接口自动化测试详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下

1、安装requests、xlrd、json、unittest库

<1>pip 命令安装:

pip install requests
pip install xlrd
pip install json
pip install unittest

2、创建六类Python Package

利用Page Object Model 设计理念创建六类Python Package(也可根据项目要求具体实施)

3、创建一个Base_Page.py

先在base包里创建一个Base_Page.py

<1>导入模块,并创建Base类,封装各类请求方法

1

2

3

4

5

6

7

8

9

10

import requests  #导入requests模块

class Base():  

    def method_post(self,url,params = None,data = None,headers = None,files = None):

        return requests.post(url = url,params = params,data = data,headers = headers,files = files)

    def method_get(self,url,params = None,data = None,headers = None,files = None):

        return requests.get(url = url,params = params,data = data,headers = headers,files = files)

    def method_put(self,url,params = None,data = None,headers = None,files = None):

        return requests.put(url = url,params = params,data = data,headers = headers,files = files)

    def method_delete(self,url,params = None,data = None,headers = None,files = None):

        return requests.delete(url = url,params = params,data = data,headers = headers,files = files

因为每一个请求都会有params参数或是data参数,但是不可能两个都存在,所以这里用了None,依次类推

<2>适配于接口用例执行,读取Excel表时,将各类请求做判断,当符合哪一种时,就去执行哪一种

1

2

3

4

5

6

7

8

9

def requests_type(self,method,url,params = None,data = None,headers = None,files = None):

        if method =='post' or method =='POST':

            return self.method_post(url = url,params = params,data = data,headers = headers,files = files)

        elif method =='get' or method =='GET':

            return self.method_get(url = url,params = params,data = data,headers = headers,files = files)

        elif method =='put' or method =='PUT':

            return requests.put(url = url,params = params,data = data,headers = headers,files = files)

        elif method =='delete' or method =='DELETE':

            return requests.delete(url = url,params = params,data = data,headers = headers,files = files)

<3> 将几种请求做简单调试,调试通了,那么我们就可以进行下一项

也可以对需要拿到cookie的接口进行封装方法保存:

1

2

3

def Get_Login_cookie(self,data):

        res = self.method_post(url = "请求网址",data = data)

        return {"userId":str(res.json()['result']['userId']),"sessionId":res.json()['result']['sessionId']}

之后我们要将base页验证的这些代码做清除,否则的话永远都是调的这些接口

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

4、创建common类

再common类下创建commons.py文件,并创建common类

<1> 封装日志方法

这里我添加了一个data包,用于存放xlrd表,以及html报告存放路径、log日志存放路径

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

log_path = r'D:\PycharmProjects\自动化接口\自动化接口测试\report\logs'

report_html = r'D:\PycharmProjects\自动化接口\自动化接口测试\report\html'

read_xlrd = r'D:\PycharmProjects\自动化接口\自动化接口测试\data'

class Common():

    #封装日志方法

    def get_logs(self,path = log_path):

        import logging,time

        logs = logging.getLogger()

        logs.setLevel(logging.DEBUG)

        path = path+'/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.log'

        write_file = logging.FileHandler(path,'a+',encoding='utf-8')

        write_file.setLevel(logging.DEBUG)

        set_logs = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - %(levelname)s - %(message)s')

        write_file.setFormatter(set_logs)

        pycharm_text = logging.StreamHandler()

        pycharm_text.setFormatter(set_logs)

        logs.addHandler(write_file)

        logs.addHandler(pycharm_text)

        return logs

<2> 封装读取Excel表方法,把他转换成字典形式,方便json格式读取

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

# 读取Excel表方法,方便后续读取接口用例数据

    def ReadExcelTypeDict(self,file_name,path = read_xlrd):

        path = path+'/' + file_name

        import xlrd

        work_book = xlrd.open_workbook(path)  # 打开Excel表

        sheets = work_book.sheet_names()  # 获取所有的sheets页

        DatasList = []

        for sheet in sheets:

            sheets = work_book.sheet_by_name(sheet)

            nrows = sheets.nrows

            for i in range(0,nrows):

                values = sheets.row_values(i)

                DatasList.append(values)

        title_list = DatasList[0]

        content_list = DatasList[1:]

        new_list = []

        for content in content_list:

            dic = {}

            for i in range(len(content)):

                dic[title_list[i]] = content[i]

            new_list.append(dic)

        return new_list   #最终返回为字典形式 有键和值

为什么要转换格式呢?

这里就涉及到了怎么设计一个自动化接口用例

用例的参数值要用json格式写入,不要有空格
预期结果的出参也要用json格式写入
不要有' '值都要用" "包起来

<3>封装一个生成HTML报告方法

1

2

3

4

5

6

7

# 封装一个HTML报告方法

    def GetHtmlResult(self,suite,title,path = report_html):

        import HTMLTestReportCN,time

        path = path + '/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.html'

        with open(path,'wb+') as f:

            run = HTMLTestReportCN.HTMLTestRunner(stream=f,description='用户相关接口测试报告',tester='小白',title = title)

            run.run(suite)

其余还有需要补充的可以继续添加,我这里三个基本够用

5、读取Excel数据表联合使用

在case包下创test用例,并调用我们在base页封装好的请求api以及common中的读取Excel数据表联合使用

<1>创建test_login.py

<2> 导入unittest、common类下的commons类、ddt数据驱动、Base下的base_page页

1

2

3

4

import unittest

import ddt

import 自动化接口测试.common.commons as common

from 自动化接口测试.base.Base_Page import Base

<3> 搭建unittest框架内部,并填充方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

import unittest

import ddt

import 自动化接口测试.common.commons as common

from 自动化接口测试.base.Base_Page import Base

r = common.Common().ReadExcelTypeDict('cezxhi .xlsx'# 拿到具体的Excel表数据

@ddt.ddt  #导入ddt模块

class TestLogin(unittest.TestCase):

    @classmethod

    def setUpClass(cls) -> None# setupclass类方法  全部用例开始前执行一次

        cls.logs = common.Common().get_logs() # 导入日志方法

        cls.logs.debug('开始写入接口自动化测试用例')

    @classmethod

    def tearDownClass(cls) -> None:

        cls.logs.debug('自动化接口用例结束')

  

    def setUp(self) -> None:

        self.logs.debug('开始本条接口用例')

  

    def tearDown(self) -> None:

        self.logs.debug('结束本条用例')

  

    @ddt.data(*r) #  引入ddt模块,读取拿到的数据

    def test_logins(self,pars):  # 用例方法名开头必须已test  pars参数为接收的表数据值

        import json  #导入json模块

        dic = json.loads(pars['body参数值'])  # 将Excel数据中的参数值转变为json格式

        url = pars['接口地址'# 拿到请求url

        yuqi = pars['预期结果'# 拿到预期结果

        fs = pars['请求方式'] # 拿到请求方式

        result = Base().requests_type(method = fs,url = url,data = dic)  # 填充base页的请求api

        self.assertEqual(result.text,yuqi)  # 进行断言 看用例是否通过

<4> 执行用例后生成测试报告:

1

2

3

4

if __name__ == '__main__':

    load = unittest.TestLoader().loadTestsFromTestCase(TestLogin)  #使用loader加载方式 来找寻所有已test开头的用例

    suite = unittest.TestSuite([load,])

    common.Common().GetHtmlResult(suite,'登录测试用例')

<5> copy当前要执行的脚本路径,添加到运行方式为python里

最后我们run一下

控制台是这样的

为什么会有400呢?因为有一些接口是异常的,比如url错误的,少传入参数、空参,所以会出错,常理之中

<6> 看下生成的测试报告

在pycharm中是这样的

然后我们copy下他的路径到浏览器中查看

根据我追踪的信息,第一条失败是因为sessionId是可以变的,每一次的值都是不一样,在这里也希望大家能够找到BUG,并妥善处理好每一个问题。

到此这篇关于Python+requests+unittest执行接口自动化测试详情的文章就介绍到这了,更多相关Python接口测试内容请博主以前的文章或继续浏览下面的相关文章希望大家以后多多支持小编!

最后: 可以在我的VX公众号:【自动化测试老司机】免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Pythonunittest库提供了一种基于单元测试的测试框架,是一个方便易用的Python测试框架。使用unittest库进行接口自动化测试可以提高测试效率和质量,本文将分享如何使用Python unittest库搭建接口自动化测试框架。 第一步:安装Python unittest库 首先需要安装Python unittest库,Python unittest库是默认安装在Python中的,无需单独安装。 第二步:安装requests模块 接口自动化测试需要使用requests模块来发送HTTP请求、获取响应等操作,因此需要安装requests模块。使用pip安装requests命令如下: pip install requests 第三步:编写测试用例 使用unittest框架编写测试用例,首先需要导入unittest库并创建测试类,编写测试方法,方法名必须以test开头,并使用assert断言方法进行验证。例如: import unittest import requests class TestApi(unittest.TestCase): def test_get_users(self): url = 'http://localhost:8080/api/users' res = requests.get(url) self.assertEqual(res.status_code, 200) self.assertIsNotNone(res.json()) 第四步:执行测试用例 使用unittest框架执行测试用例,使用unittest.main()方法运行所有测试用例。例如: if __name__ == '__main__': unittest.main() 执行测试用例后,将输出测试结果,包括测试用例总数、成功数、失败数等。 第五步:持续集成 持续集成可以帮助实现自动化测试,可以将上述步骤集成到自动化测试框架中,提高测试效率和质量。使用持续集成工具,例如Jenkins,可以实现自动化测试的调度和执行,定期输出测试报告,是测试自动化化的不二选择。 在以上步骤中,请求地址和验证方法需要根据具体需求进行更改,但是编写测试用例的方法是类似的,熟练掌握unittest库可以快速搭建接口自动化测试框架,提高测试效率和质量。 ### 回答2: Python unittest requests 接口自动化测试框架搭建教程博客是指一篇博客文章,介绍如何使用Python unittestrequests库搭建接口自动化测试框架。该教程博客有如下几个方面: 1. 简单介绍Python unittestrequests库,以及它们在接口自动化测试中的使用; 2. 详细讲解如何安装Python unittestrequests库,并编写测试用例; 3. 讲解如何通过使用Python unittest的setUp()和tearDown()方法,在测试用例执行前后进行一些操作,以便更好地进行测试; 4. 介绍如何运行测试用例,并查看测试结果,以及如何进行测试报告生成; 5. 提供一些实例,展示如何使用Python unittestrequests库搭建接口自动化测试框架。 通过这篇教程博客,读者可以学习如何使用Python unittestrequests库搭建接口自动化测试框架,并且能够快速了解并掌握这种接口自动化测试方法的流程和基本方法。此外,该教程博客也提供一些实例,帮助读者更好地理解和应用这种方法。因此,这篇教程博客对于想要学习接口自动化测试以及深入了解Python unittestrequests库的读者来说,是一篇非常有价值的文章。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值