有很多小伙伴想要基础版本,从0到1,今天它来了~用十个特别简单的案例,让你清晰的从0到1接触到接口测试。最好自己动手去写一遍,光看是不行的。从刚开始特别简单的案例,到最后略有难度的接口小案例,让你快速清晰的学习接口!对于接口测试,很多同学可能会说接口真的有测试的必要吗?我只把功能测试好了不就ok了吗?
答案当然是否定的,接口测试的重要性如下:
那么接口提测的标准是什么呢?首先对于接口文档的要求如下:
接口类型
输入参数
每个参数名;
每个参数类型;
每个参数业务含义;
每个是否可空;
每个字段长度(可选,一般需要提供,有严格要求的字段需特别注明);
接口通用基本要求:
返回json字段信息,不可出现 关键字类型,如 object,interface,public,java等各类语言代码中关键字类型
涉及金额等信息时应采取加密方式,后端需进行校验,防止通过接口拦截造成损失
HTTPS方式传输
请求方式,一般获取数据是get,提交表单是post
信息存取可采取对称加密和非对称加密的结合(可选,也可选一种)
接口进行手机号正则验证,字符串和上传文件图片等提前规划大小限制
检查数据正确性,每个接口从数据存取数据等是否正确,是否在正确的数据库表取数据等
为空等验证一定要做,正确状态码和错误状态码一定全部记录下来,状态码代表的意思等
以上是小白自己总结和平常工作整理的,如有不对请大家指正,希望和大家一起学习进步,共同成长,谢谢。
接下来用几个特别简单的案例,来接触学习接口测试之旅吧。
如果你是第一次接触开发语言也不要紧,多写多思考,没有人天生就会写代码,都是慢慢学习出来的,在这里python环境如何搭建等就不在累述了,网上能搜到很多如何安装资料。
建议如下:
使用最新的python版本进行学习
代码一定要多写多练多思考
学习心得,两个点第一点,多去思考,第二点多敲。
环境:python3.7版本
系统:w7
工具:PyCharm
1.第一个案例(发送一个get请求)
# coding=utf-8 import requests # 请求的链接 url = 'http://suggest.taobao.com/sug?code=utf-8&q=裤子&callback=cb 用例' # 发送get请求 r = requests.get(url) # 请求的状态码 200代表成功 status = r.status_codeprint(status) # 请求的内容 j = r.json() print(j)
输出结果如下:
2.第二个案例(发送一个post请求)
# 请求的链接 url = 'http://suggest.taobao.com/sug' # post请求以字典格式传入 data = {'code': 'utf-8', 'q': '裤子', 'callback': 'cb 用例'} # 发送post请求 r = requests.post(url, data) # 请求的状态码 200代表成功 status = r.status_code print(status) # 请求的内容 print(r.content)
输出结果如下:
(接口只返回了一个b,这里只需要明白遇到post接口怎么去请求就好了~)
3.第三个案例(进行接口状态码断言)
# coding=utf-8 import requests # 请求的链接 url = 'http://suggest.taobao.com/sug?code=utf-8&q=裤子&callback=cb 用例' # 发送请求 r = requests.post(url) # 请求的状态码 200代表成功 status = r.status_code # 进行接口的状态码断言,等于200则认为通过,不是200不通过 if status == 200: print('用例测试通过') else: print('测试不通过') print(status) # 请求的内容 j = r.json() print(j)
输出结果如下:
4.第四个案例(进行接口内容断言-正常情况)
# coding=utf-8 import requests # 请求的链接 url = 'http://suggest.taobao.com/sug?code=utf-8&q=裤子&callback=cb 用例' # 发送请求 r = requests.post(url) # 请求的状态码 200代表成功 status = r.status_code # 进行接口的状态码断言,等于200则认为通过,不是200不通过 if status == 200: print('用例测试通过') else: print('测试不通过') print(status) # 请求的内容 j = r.json() # 判断接口返回内容里面,有没有 裤子女夏 内容 if '裤子女夏' in str(j): print('存在此数据') else: print('不存在此数据') print(j)
输出结果如下:
5.第五个案例(进行接口内容断言-异常情况)
在这里修改了上面的 裤子女夏 修改为 裤子女夏1
# coding=utf-8 import requests # 请求的链接 url = 'http://suggest.taobao.com/sug?code=utf-8&q=裤子&callback=cb 用例' # 发送请求 r = requests.post(url) # 请求的状态码 200代表成功 status = r.status_code # 进行接口的状态码断言,等于200则认为通过,不是200不通过 if status == 200: print('状态码校验过') else: print('状态码校验不通过') print(status) # 请求的内容 j = r.json() # 判断接口返回内容里面,有没有 裤子女夏 内容 # 裤子女夏 增加了一个1 if '裤子女夏1' in str(j): print('存在此数据') else: print('不存在此数据') print(j)
输出结果如下:
6.第六个案例(接口的小封装-接口和逻辑代码分开控制-~)
增加config.py主要存放接口
# coding=utf-8 # baseurl 一般接口都是分测试接口和正式接口的,只需要修改ip即可 baseurl = 'http://suggest.taobao.com' # 假装是登录接口 baseurl=于楼上 url_login = baseurl + '/sug?code=utf-8&q=裤子&callback=cb 用例' # 假装是注冊接口 url_register = baseurl + '/sug?code=utf-8&q=裤子&callback=cb 用例' # 假装是首页接口 url_home = baseurl + '/sug?code=utf-8&q=裤子&callback=cb 用例'
增加testapi.py
# coding=utf-8 import requests # 引入config配置接口的文件 import config # 发送请求 使用config.来调用想要的接口 调用首页接口 r = requests.get(config.url_home) # 请求的状态码 200代表成功 status = r.status_code # 进行接口的状态码断言,等于200则认为通过,不是200不通过 if status == 200: print('状态码校验过') else: print('状态码校验不通过') print(status) # 请求的内容 j = r.json() # 判断接口返回内容里面,有没有 裤子女夏 内容 # 裤子女夏 增加了一个1 if '裤子女夏1' in str(j): print('存在此数据') else: print('不存在此数据') print(j)
输出结果如下:
用心的同学已经发现了,这样的话每次接口变了链接等,只需要修改config文件即可 不用去逻辑代码里面去找了。
7.第七个案例(接口的小封装-接口和逻辑代码分开控制-~)
不知道有没有同学发现,如果是post接口的话,参数还是需要在逻辑代码单独写吗?接下来咱们解决这个事情~~,参数也进行分离化。
config.py进行修改如下
# coding=utf-8 # baseurl 一般接口都是分测试接口和正式接口的,只需要修改ip即可 baseurl = 'http://suggest.taobao.com' # 假装是登录接口 url_login = baseurl + '/sug?code=utf-8&q=裤子&callback=cb 用例' # 假装是注冊接口 假装是post请求 拼接成字典格式,通过吗,通过key value的形式获取 # 注册接口是key 链接是value url_register = {'注册接口': baseurl + '/sug', 'parmras': {'code': 'utf-8', 'q': '裤子', 'callback': 'cb 用例'}} # 假装是首页接口 url_home = baseurl + '/sug?code=utf-8&q=裤子&callback=cb 用例'
testapi.py 修改如下:
# coding=utf-8 import requests # 引入config配置接口的文件 import config # 发送post请求,通过config文件获取接口url 和接口的参数 ,如果参数更改了,咱们就修改config文件就可以了 r = requests.post(config.url_register['注册接口'], config.url_register['parmras']) # 请求的状态码 200代表成功 status = r.status_code # 进行接口的状态码断言,等于200则认为通过,不是200不通过 if status == 200: print('状态码校验过') else: print('状态码校验不通过') # 输出状态码 print(status) # 因为展示测试的接口没有json,所以只能输出content啦~ print(r.content)
输出结果:
8.第八个案例(接口的小封装-执行多个接口~)
这次只需要修改testapi.py即可,代码如下:
# coding=utf-8 import requests # 引入config配置接口的文件 import config # 测试注册接口的函数 def test_register(): # 发送post请求,通过config文件获取接口url 和接口的参数 ,如果参数更改了,咱们就修改config文件就可以了 r = requests.post(config.url_register['注册接口'], config.url_register['parmras']) # 请求的状态码 200代表成功 status = r.status_code # 进行接口的状态码断言,等于200则认为通过,不是200不通过 if status == 200: print('状态码校验过') else: print('状态码校验不通过') # 输出状态码 print(status) # 因为展示测试的接口没有json,所以只能输出content啦~ print(r.content) # 测试登录接口的函数 def test_login(): # 因为发送的get请求,参数是跟在接口的后面的,所以不用通过字典的形式获取 r = requests.post(config.url_login) # 请求的状态码 200代表成功 status = r.status_code # 进行接口的状态码断言,等于200则认为通过,不是200不通过 if status == 200: print('状态码校验过') else: print('状态码校验不通过') # 输出状态码 print(status) # 因为展示测试的接口没有json,所以只能输出content啦~ print(r.json()) # 预期结果 在接口返回结果后,查看接口里面有没有此值,也就是传说的断言了 expected = '裤子男夏季' # 将接口返回的信息转为字符串类型,in 是判断接口的返回值里面 存不存在 预期结果的值,存在就通过 不存在就不通过 if expected in str(r.json()): print('断言通过') else: print('断言不通过') # 调用执行测试接口 test_register() print('执行了 测试注册接口的函数') # 调用执行登录接口 test_login() print('执行了 测试登录接口的函数')
总结:本次使用函数体的小知识点,和调用函数的小知识,如果感觉到自己不会学习赶紧去补充下自己的知识吧~输出结果如下:
9.第九个案例(接口的小封装-增加)
本次引用unittest测试框架,进行断言
testapi.py修改如下
# coding=gbk import requests # 引入config配置接口的文件 import config # 增加单元测试框架 import unittest from applet import HMLRunner """ 注意事项:unittest这个框架只支持test开头的函数体才会去执行哦 """ # 创建一个类型,执行用例的类,继承unittest的testcase类 class Testcase(unittest.TestCase): # 测试注册接口的函数 def test_register(self): # 发送post请求,通过config文件获取接口url 和接口的参数 ,如果参数更改了,咱们就修改config文件就可以了 r = requests.post(config.url_register['注册接口'], config.url_register['parmras']) # 请求的状态码 200代表成功 status = r.status_code # 使用unittest的断言 self.assertEqual(200, r.status_code) # 输出状态码 print(status) # 因为展示测试的接口没有json,所以只能输出content啦~ print(r.content) print(r.text) # 测试登录接口的函数 def test_login(self): # 因为发送的get请求,参数是跟在接口的后面的,所以不用通过字典的形式获取 r = requests.post(config.url_login) # 请求的状态码 200代表成功 status = r.status_code # 使用unittest的断言 self.assertEqual(200, r.status_code) # 输出状态码 print(status) print(r.json()) # 预期结果 在接口返回结果后,查看接口里面有没有此值,也就是传说的断言了 expected = '裤子男夏季' # 获取接口的返回信息 j = r.json() # 输出接口的返回信息 print(j) # 进行断言操作和接口的返回值,expected是预期结果是咱们提前知道的内容想去判断接口里面有没有此值 # j['result'][1][1]是接口返回的一个,因为接口第一次是字典,所以通过key去取,里面嵌套是数组格式~ self.assertEqual(expected, j['result'][1][0]) print(r.text) if __name__ == '__main__': import time # 定义测试用例的目录为当前目录 test_dir = './' # 加载测试用例,根据文件路径 执行test开头的py文件 discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py') # 按照一定的格式获取当前的时间 now = time.strftime("%Y-%m-%d %H-%M-%S") # 定义报告存放路径 目前是存在运行的当前目录 filename = now + 'test_result.html' # 打开file文件流 fp = open(filename, "wb") # 定义测试报告 runner = HMLRunner.HTMLTestRunner(stream=fp, title=u"测试报告(史无前例)", description=u"测试用例执行情况") # 运行测试 runner.run(discover) # 关闭报告文件 fp.close()
执行结果如下:
看到 Ran 2 tests in 0.212s
意思是执行了两个用例,用时0.212秒
本文为51Testing经授权转载,转载文章所包含的文字来源于作者:寻鱼的猫。如因内容或版权等问题,请联系51Testing进行删除。原文链接:https://www.jianshu.com/p/eac7a9d2327f