python 自动化接口测试(6)

简介: 笔记

  迎接新的一波更新吧,这次是基于图灵机器人的一个api接口的测试。

 这是api的接口:http://www.tuling123.com/openapi/api

 我们试着通过浏览器直接访问看下20.png

 这是反馈的结果,那么我们来看下图灵机器人这边给的接口文档,http://www.tuling123.com/help/h_cent_webapi.jhtml?nav=doc这是文档中心,这里的编写很规范的,我们看到这个就很好知道我们想要用的接口,需要的东西,以及简单的接口说明,我们可以从这里很快的得到我们想要的信息。

21.png

这里面详细的给我们描述了需要的接口地址,包括请求格式和请求参数,那么我们接下来,来分析下,

可见这个文档给我们了请求地址,请求参数格式,那么我们接下来需要想想我们的思路,

理清我们要测试的目的,测试的思路,怎么去来写这个测试用例,怎么组织我们想要的测试结果,尽量让我们的测试更加全面,这里呢,

我的想法呢就是主要有一下, 测试api的url   测试请求方式   请求的参数,返回结果。那么我们的断言写在哪里呢,我是把断言用返回结果code加断言,

22.png

这是我整个目录

让返回结果来看看api返回值是否正确,那么我来写我的测试用例,在这里,我写的测试用例是基于yaml的文件写的,方便这里的读写,

post:

post1:

  key: "aaaa"

  coneent: 'sasa'

  url: 'http://www.tuling123.com/openapi/api'

  fangshi: 'POST'

  code: "40001" #密码错误

post2:

  key: "dfeb1cc8125943d29764a2f2f5c33739"

  coneent: ''

  url: 'http://www.tuling123.com/openapi/api'

  fangshi: 'POST'

  code: "40002" #未输入内容

post3:

  key: "dfeb1cc8125943d29764a2f2f5c33739"

  coneent: ''

  fangshi: 'POST'

  url: 'http://www.tuling123.com/openapi/api'

  code: "40007" #格式异常

post4:

  key: "dfeb1cc8125943d29764a2f2f5c33739"

  coneent: 'sdsad'

  fangshi: 'POST'

  url: 'http://www.tuling123.com/openapi/api'

  code: "40004" #次数用完

我的断言就是这些code,

那么我们写好测试用例了,下面就是来组织我们的脚本了。我喜欢吧一些我们经常用的封装起来,不管是框架也好,还是让我用起来方便吧,我一般都是简单的写几个函数,这样呢,在我接下来用的时候就特别方便了。我这里面呢使用的是第三方库,理由很简单,就是我们的第三方库提供给我们很多便利, 我使用的是requests来做的,我们大家可以看下,教程 。      这是一个中文的教程,大家可以来试试,这里因为我是文章,就不给大家讲解。大家可以看下详细的文档。接下来看下我封装的,其实就是简单的总结

# -*- coding: utf-8 -*-
# @Author  : leizi
import requests,json
class reques():
    def __init__(self):
        self.headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:51.0) Gecko/20100101 Firefox/51.0"}
    def get(self, url):#get消息
        try:
            r = requests.get(url, headers=self.headers)
            r.encoding = 'UTF-8'
            json_response = json.loads(r.text)
            return json_response
        except Exception as e:
            print('get请求出错,出错原因:%s'%e)
            return {}
    def post(self, url, params):#post消息
        data = json.dumps(params)
        try:
            r =requests.post(url,params=params,headers=self.headers)
            json_response = json.loads(r.text)
            return json_response
        except Exception as e:
            print('post请求出错,原因:%s'%e)
    def delfile(self,url,params):#删除的请求
        try:
            del_word=requests.delete(url,params,headers=self.headers)
            json_response=json.loads(del_word.text)
            return json_response
        except Exception as e:
            return {}
            print('del请求出错,原因:%s'%e)
    def putfile(self,url,params):#put请求
        try:
            data=json.dumps(params)
            me=requests.put(url,data)
            json_response=json.loads(me.text)
            return json_response
        except Exception as e:
            print('put请求出错,原因:%s'%e)
            return json_response

其实没有怎么封装吧,但是呢 还是给我提供了便利。 我封装了几个请求方式,这样在接下来的使用中我可以直接使用了,我自己固定好的格式,给定的函数。

接下来就是来写我们的用例了。这里我利用了yaml和 unittest来组织用例。yaml使用方法以及剖析。http://www.cnblogs.com/c9com/archive/2013/01/05/2845539.html

unittest详细讲解:http://www.cnblogs.com/yufeihlf/p/5707929.html

# -*- coding: utf-8 -*-
# @Author  : leizi
from fengzhuang.feng import reques
import yaml,unittest
class Test_tuling(unittest.TestCase):
    def setUp(self):
        title=u'登陆测试'
        self.data_file = open(r"C:\\Users\\Administrator\\Desktop\\jiejko\\data\\data.yaml","r",encoding= "utf-8")
        self.data = yaml.load(self.data_file)
        self.post_data=self.data['post']
    def tearDown(self):
        pass
    def test_post1(self):
        try:
            self.url=self.post_data['post1']['url']
            self.key=self.post_data['post1']['key']
            self.coneent=self.post_data['post1']['coneent']
            self.fangshi=self.post_data['post1']['fangshi']
            self.code=int(self.post_data['post1']['code'])
            self.parem={'key':self.key,'info':self.coneent}
            if self.fangshi == 'POST':
                self.me=reques().post(url=self.url,params=self.parem)
                self.assertEqual(self.me['code'],self.code,msg='接口返回标识符有误')
            else:
                print('不支持%s方式请求'%self.fangshi)
        except Exception as e:
            print('用例1测试失败,原因:%s'%e)
    def test_post2(self):
        try:
            self.url=self.post_data['post2']['url']
            self.key=self.post_data['post2']['key']
            self.coneent=self.post_data['post2']['coneent']
            self.fangshi=self.post_data['post2']['fangshi']
            self.code=int(self.post_data['post2']['code'])
            self.parem={'key':self.key,'info':self.coneent}
            if self.fangshi == 'POST':
                self.me=reques().post(url=self.url,params=self.parem)
                self.assertEqual(self.me['code'],self.code,msg='接口返回标识符有误')
            else:
                print('不支持%s方式请求'%self.fangshi)
        except Exception as e:
            print('用例2测试失败,原因:%s'%e)
    def test_post3(self):
        try:
            self.url=self.post_data['post3']['url']
            self.key=self.post_data['post3']['key']
            self.coneent=self.post_data['post3']['coneent']
            self.fangshi=self.post_data['post3']['fangshi']
            self.code=int(self.post_data['post3']['code'])
            self.parem={'key':self.key,'info':self.coneent}
            if self.fangshi == 'POST':
                self.me=reques().post(url=self.url,params=self.parem)
                self.assertEqual(self.me['code'],self.code,msg='接口返回标识符有误')
            else:
                print('不支持%s方式请求'%self.fangshi)
        except Exception as e:
            print('用例3测试失败,原因:%s'%e)
    def test_post4(self):
        try:
            self.url=self.post_data['post4']['url']
            self.key=self.post_data['post4']['key']
            self.coneent=self.post_data['post4']['coneent']
            self.fangshi=self.post_data['post4']['fangshi']
            self.code=int(self.post_data['post4']['code'])
            self.parem={'key':self.key,'info':self.coneent}
            if self.fangshi == 'POST':
                self.me=reques().post(url=self.url,params=self.parem)
                self.assertEqual(self.me['code'],self.code,msg='接口返回标识符有误')
            else:
                print('不支持%s方式请求'%self.fangshi)
        except Exception as e:
            print('用例4测试失败,原因:%s'%e)
if __name__ == '__main__':
    project_path=''
    suite = unittest.TestSuite()
    suite.addTest(Test_tuling("test_post4"))
    suite.addTest(Test_tuling('test_post3'))
    suite.addTest(Test_tuling('test_post2'))
    suite.addTest(Test_tuling('test_post1s'))
    temp=str(time.time())
    filedir=project_path+"//report//"+temp
    os.makedirs(filedir)
    filename="//pyresult.html"
    filepath=filedir+filename
    fp=file(filepath,'wb')# 调用HTMLtestrunner来执行脚本并生成测试报告,html格式的
    runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='report',description='demo')
    runner.run(suite)

这是我写的用例。那么大家可以看出来,我的写法也是简单的。就是一些简单的使用。

这边的测试报告我使用的是HTMLrunner。


由于在后面在6的基础上进行了 优化,git clone代码后,使用下面命令

git checkout  5a9c6b041aa1b47e40df52d57727ae39f3e6319c

那么我们来看下最后的测试报告,

23.png

 

最后我还写了发送邮件的模块,其中加的log模块暂时还没有用在代码中。 后续的优化,这样,我就运行一下,然后最后给我发送测试报告,我不用盯着电脑了。

其实在这里,大家还可以加入多线程来跑脚本,这样比较快。

其实大家都是为了走的更远,做的更好。路在脚下,相信自己。


相关文章
|
7天前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
14天前
|
API Python
【02】优雅草央央逆向技术篇之逆向接口协议篇-以小红书为例-python逆向小红书将用户名转换获得为uid-优雅草央千澈
【02】优雅草央央逆向技术篇之逆向接口协议篇-以小红书为例-python逆向小红书将用户名转换获得为uid-优雅草央千澈
|
25天前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
143 61
|
6天前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
48 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
1月前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
209 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
19天前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
83 15
|
7天前
|
存储 测试技术 数据库
接口测试工具攻略:轻松掌握测试技巧
在互联网快速发展的今天,软件系统的复杂性不断增加,接口测试工具成为确保系统稳定性的关键。它如同“翻译官”,模拟请求、解析响应、验证结果、测试性能并支持自动化测试,确保不同系统间信息传递的准确性和完整性。通过Apifox等工具,设计和执行测试用例更加便捷高效。接口测试是保障系统稳定运行的第一道防线。
|
7天前
|
Web App开发 JSON 测试技术
API测试工具集合:让接口测试更简单高效
在当今软件开发领域,接口测试工具如Postman、Apifox、Swagger等成为确保API正确性、性能和可靠性的关键。Postman全球闻名但高级功能需付费,Apifox则集成了API文档、调试、Mock与自动化测试,简化工作流并提高团队协作效率,特别适合国内用户。Swagger自动生成文档,YApi开源但功能逐渐落后,Insomnia界面简洁却缺乏团队协作支持,Paw仅限Mac系统。综合来看,Apifox是国内用户的理想选择,提供中文界面和免费高效的功能。
|
27天前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
249 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
16天前
|
存储 安全 数据可视化
用Python实现简单的任务自动化
本文介绍如何使用Python实现任务自动化,提高效率和准确性。通过三个实用案例展示:1. 使用`smtplib`和`schedule`库自动发送邮件提醒;2. 利用`shutil`和`os`库自动备份文件;3. 借助`requests`库自动下载网页内容。每个案例包含详细代码和解释,并附带注意事项。掌握这些技能有助于个人和企业优化流程、节约成本。
50 3

热门文章

最新文章