如何实现Python编程语言下的接口自动化测试?

2026-05-16 20:302阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1805个文字,预计阅读时间需要8分钟。

如何实现Python编程语言下的接口自动化测试?

1)环境准备:接口测试的方式有很多,例如可以使用工具(如JMeter、Postman等)进行测试,也可以自己编写代码进行接口测试。工具的使用相对简单,重点是搞清楚待测项目的接口协议是什么。

1)环境准备:

  接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后有针对性的进行选择,甚至当工具不太适合项目时需要自己进行开发。

  在我们项目的初期,我们采用的是jmeter进行接口测试,当时觉得这个工具上手简单,团队成员学习成本低,并且接口测试的脚本稍微调整一下还可以用来做性能测试。

  不过随着项目规模、团队人数的不断增长,渐渐的这个工具有适应不了当前项目的需求了,为此我们项目也重新开发了相关接口自动化的平台。但是,但是。。。可能是我让大家中毒太深,现在很多同学一提到接口测试关联到jmeter,为此,我深深感到不安。毕竟jmeter只是个工具,换个项目换个协议你是否还能玩转接口测试呢?session和cookie有什么区别?工具又是怎么实现的呢?

  比如session如何保存,接口依赖如何处理,case如何管理及执行顺序,测试数据如何管理等等题,这个过程也有助于我们更加深刻的理解接口测试和www.baidu.com/" r = requests.get(url) #将RequestsCookieJar转换成字典 c = requests.utils.dict_from_cookiejar(r.cookies) print r.cookies print c for a in r.cookies: print a.name,a.value

输出:

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]> {'BDORZ': '27315'} BDORZ 27315

2、发送Cookie

# -*- coding:utf-8 -*- #发送cookie到服务器 import requests import json host = "docs.python-requests.org/en/master/user/quickstart/#cookies
docs.python-requests.org/en/master/user/advanced/#session-objects

(5)其他(认证&代理&超时设置)

一、认证

1、基本认证:

# -*- coding:utf-8 -*- import requests url = "docs.python-requests.org/en/master/user/authentication/

二、代理

1、方法一:proxy参数:

import requests proxies = { "41.118.132.69:4433" } r = requests.post("10.10.1.10:3128" $ export HTTPS_PROXY="10.10.1.10:1080" $ python >>> import requests >>> requests.get('example.org')

3、HTTP Basic Auth使用代理方法:user:password@host/

proxies = {'user:pass@10.10.1.10:3128/'}

三、证书验证

1、SSL证书(HTTPS):

import requests #跳过12306 的证书验证,把 verify 设置为 False: r = requests.get('kyfw.12306.cn/otn/', verify=False) print r.text

2、客户端证书:

>>> requests.get('kennethreitz.org', cert=('/path/client.cert', '/path/client.key')) <Response [200]>

or

s = requests.Session() s.cert = '/path/client.cert'

四、超时配置

如何实现Python编程语言下的接口自动化测试?

1 、利用timeout参数来配置最大请求时间:

r = requests.get('github.com', timeout=5)

2、设置timeout=None,告诉请求永远等待响应,而不将请求作为超时值传递

r = requests.get('github.com', timeout=None)

五、错误异常

1、所有Requests显式抛出的异常都继承自:requests.exctptions.RequestException

2、遇到网络问题(如:DNS查询失败,拒绝连接等)时,requests会抛出一个ConnectionError异常

3、遇到罕见的无效HTTP响应时,Request则会抛出一个HTTPError异常

4、若请求超时,则抛出一个Timeout异常

5、若请求超过了最大的重写向次数,则会抛出一个TooManyRedirects异常

(6)unittest-单个用例管理:

上面主要介绍了环境搭建和requests库的使用,可以使用这些进行接口请求的发送。但是如何管理接口案例?返回结果如何自动校验?这些内容光靠上面五节是不行的,因此从本节开始我们引入python单元测试框架 unittest,用它来处理批量用例管理,校验返回结果,初始化工作以及测试完成后的环境复原工作等等。

一、单个用例管理起来比较简单,参考如下图,单个用例一般多用在调试的时候:

二、代码如下:

# -*- coding:utf-8 -*- # 单个用例执行 # 1、导入模块 import unittest # 2、继承自unittest.TestCase类 class TestOne(unittest.TestCase): # 3、配置环境:进行测试前的初始化工作 def setUp(self): print '\ncases before' pass # 4、定义测试用例,名字以“test”开头 def test_add(self): '''test add method''' print 'add...' a = 3 + 4 b = 7 # 5、定义assert断言,判断测试结果 self.assertEqual(a, b) def test_sub(self): '''test sub method''' print 'sub...' a = 10 - 5 b = 4 self.assertEqual(a, b) # 6、清理环境 def tearDown(self): print 'case after' pass # 7、该方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们 if __name__ == '__main__': unittest.main()

输出:

Ran 2 tests in 0.001s OK cases before add... case after cases before sub... case after Process finished with exit code 0

(8)unittest-生成测试报告:

用例的管理问题解决了后,接下来要考虑的就是报告我问题了,这里生成测试报告主要用到HTMLTestRunner.py 这个模块,下面简单介绍一下如何使用:

一、下载HTMLTestRunner下载:

这个模块不能通过pip安装,只能下载安装,下载地址如下:

python2.x版本:tungwaiyip.info/software/HTMLTestRunner.html

python3.x版本:hzqldjb.blog.51cto.com/9587820/1590802

二、mac下配置

1、终端进入python环境

2、输入:

import sys print sys.path

3、找到site-packages文件夹的路径并将下载的HTMLTestRunner.py文件拷贝到此的文件夹下

4、在python环境下,输入 import HTMLTestRunner 不报错即安装成功

三、使用该模块生成报告:

1、目录结构

  • case包下面有baidu,httpbin两个包
  • 每个包下面分别有两个测试的py文件
  • 每个test_00x.py文件里各有2个test case
  • run_all_case.py文件:用来执行所有的test case且生成测试报告

2、运行后生成报告如下:

3、run_all_case.py代码如下:

# -*- coding:utf-8 -*- import unittest import os import time import HTMLTestRunner # 用例路径 case_path = os.path.join(os.getcwd()) # 报告存放路径 report_path = os.path.join(os.getcwd(), 'report') print report_path def all_case(): discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py", top_level_dir=None) print discover return discover if __name__ == '__main__': # 1、获取当前时间,这样便于下面的使用。 now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())) # 2、html报告文件路径 report_abspath = os.path.join(report_path, "result_"+now+".html") # 3、打开一个文件,将result写入此file中 fp = open(report_abspath, "wb") runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'接口自动化测试报告,测试结果如下:', description=u'用例执行情况:') # 4、调用add_case函数返回值 runner.run(all_case()) fp.close()

到此这篇关于Python接口自动化测试的实现的文章就介绍到这了,更多相关Python接口自动化测试内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

本文共计1805个文字,预计阅读时间需要8分钟。

如何实现Python编程语言下的接口自动化测试?

1)环境准备:接口测试的方式有很多,例如可以使用工具(如JMeter、Postman等)进行测试,也可以自己编写代码进行接口测试。工具的使用相对简单,重点是搞清楚待测项目的接口协议是什么。

1)环境准备:

  接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后有针对性的进行选择,甚至当工具不太适合项目时需要自己进行开发。

  在我们项目的初期,我们采用的是jmeter进行接口测试,当时觉得这个工具上手简单,团队成员学习成本低,并且接口测试的脚本稍微调整一下还可以用来做性能测试。

  不过随着项目规模、团队人数的不断增长,渐渐的这个工具有适应不了当前项目的需求了,为此我们项目也重新开发了相关接口自动化的平台。但是,但是。。。可能是我让大家中毒太深,现在很多同学一提到接口测试关联到jmeter,为此,我深深感到不安。毕竟jmeter只是个工具,换个项目换个协议你是否还能玩转接口测试呢?session和cookie有什么区别?工具又是怎么实现的呢?

  比如session如何保存,接口依赖如何处理,case如何管理及执行顺序,测试数据如何管理等等题,这个过程也有助于我们更加深刻的理解接口测试和www.baidu.com/" r = requests.get(url) #将RequestsCookieJar转换成字典 c = requests.utils.dict_from_cookiejar(r.cookies) print r.cookies print c for a in r.cookies: print a.name,a.value

输出:

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]> {'BDORZ': '27315'} BDORZ 27315

2、发送Cookie

# -*- coding:utf-8 -*- #发送cookie到服务器 import requests import json host = "docs.python-requests.org/en/master/user/quickstart/#cookies
docs.python-requests.org/en/master/user/advanced/#session-objects

(5)其他(认证&代理&超时设置)

一、认证

1、基本认证:

# -*- coding:utf-8 -*- import requests url = "docs.python-requests.org/en/master/user/authentication/

二、代理

1、方法一:proxy参数:

import requests proxies = { "41.118.132.69:4433" } r = requests.post("10.10.1.10:3128" $ export HTTPS_PROXY="10.10.1.10:1080" $ python >>> import requests >>> requests.get('example.org')

3、HTTP Basic Auth使用代理方法:user:password@host/

proxies = {'user:pass@10.10.1.10:3128/'}

三、证书验证

1、SSL证书(HTTPS):

import requests #跳过12306 的证书验证,把 verify 设置为 False: r = requests.get('kyfw.12306.cn/otn/', verify=False) print r.text

2、客户端证书:

>>> requests.get('kennethreitz.org', cert=('/path/client.cert', '/path/client.key')) <Response [200]>

or

s = requests.Session() s.cert = '/path/client.cert'

四、超时配置

如何实现Python编程语言下的接口自动化测试?

1 、利用timeout参数来配置最大请求时间:

r = requests.get('github.com', timeout=5)

2、设置timeout=None,告诉请求永远等待响应,而不将请求作为超时值传递

r = requests.get('github.com', timeout=None)

五、错误异常

1、所有Requests显式抛出的异常都继承自:requests.exctptions.RequestException

2、遇到网络问题(如:DNS查询失败,拒绝连接等)时,requests会抛出一个ConnectionError异常

3、遇到罕见的无效HTTP响应时,Request则会抛出一个HTTPError异常

4、若请求超时,则抛出一个Timeout异常

5、若请求超过了最大的重写向次数,则会抛出一个TooManyRedirects异常

(6)unittest-单个用例管理:

上面主要介绍了环境搭建和requests库的使用,可以使用这些进行接口请求的发送。但是如何管理接口案例?返回结果如何自动校验?这些内容光靠上面五节是不行的,因此从本节开始我们引入python单元测试框架 unittest,用它来处理批量用例管理,校验返回结果,初始化工作以及测试完成后的环境复原工作等等。

一、单个用例管理起来比较简单,参考如下图,单个用例一般多用在调试的时候:

二、代码如下:

# -*- coding:utf-8 -*- # 单个用例执行 # 1、导入模块 import unittest # 2、继承自unittest.TestCase类 class TestOne(unittest.TestCase): # 3、配置环境:进行测试前的初始化工作 def setUp(self): print '\ncases before' pass # 4、定义测试用例,名字以“test”开头 def test_add(self): '''test add method''' print 'add...' a = 3 + 4 b = 7 # 5、定义assert断言,判断测试结果 self.assertEqual(a, b) def test_sub(self): '''test sub method''' print 'sub...' a = 10 - 5 b = 4 self.assertEqual(a, b) # 6、清理环境 def tearDown(self): print 'case after' pass # 7、该方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们 if __name__ == '__main__': unittest.main()

输出:

Ran 2 tests in 0.001s OK cases before add... case after cases before sub... case after Process finished with exit code 0

(8)unittest-生成测试报告:

用例的管理问题解决了后,接下来要考虑的就是报告我问题了,这里生成测试报告主要用到HTMLTestRunner.py 这个模块,下面简单介绍一下如何使用:

一、下载HTMLTestRunner下载:

这个模块不能通过pip安装,只能下载安装,下载地址如下:

python2.x版本:tungwaiyip.info/software/HTMLTestRunner.html

python3.x版本:hzqldjb.blog.51cto.com/9587820/1590802

二、mac下配置

1、终端进入python环境

2、输入:

import sys print sys.path

3、找到site-packages文件夹的路径并将下载的HTMLTestRunner.py文件拷贝到此的文件夹下

4、在python环境下,输入 import HTMLTestRunner 不报错即安装成功

三、使用该模块生成报告:

1、目录结构

  • case包下面有baidu,httpbin两个包
  • 每个包下面分别有两个测试的py文件
  • 每个test_00x.py文件里各有2个test case
  • run_all_case.py文件:用来执行所有的test case且生成测试报告

2、运行后生成报告如下:

3、run_all_case.py代码如下:

# -*- coding:utf-8 -*- import unittest import os import time import HTMLTestRunner # 用例路径 case_path = os.path.join(os.getcwd()) # 报告存放路径 report_path = os.path.join(os.getcwd(), 'report') print report_path def all_case(): discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py", top_level_dir=None) print discover return discover if __name__ == '__main__': # 1、获取当前时间,这样便于下面的使用。 now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())) # 2、html报告文件路径 report_abspath = os.path.join(report_path, "result_"+now+".html") # 3、打开一个文件,将result写入此file中 fp = open(report_abspath, "wb") runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'接口自动化测试报告,测试结果如下:', description=u'用例执行情况:') # 4、调用add_case函数返回值 runner.run(all_case()) fp.close()

到此这篇关于Python接口自动化测试的实现的文章就介绍到这了,更多相关Python接口自动化测试内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!