一、接口测试理论
1、什么是接口测试
接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。
2、接口测试有哪些类型
接口一般分为两种:1.程序内部的接口 2.系统对外的接口
系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。
程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。
接口的分类:1.webservice接口 2.http api接口
webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。
http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。
json是一种通用的数据类型,所有的语言都认识它。(json的本质是字符串,他与其他语言无关,只是可以经过稍稍加工可以转换成其他语言的数据类型,比如可以转换成Python中的字典,key-value的形式,可以转换成JavaScript中的原生对象,可以转换成java中的类对象等。)
3、接口测试的流程
4、为什么要做接口测试
测试介入越早越能更早的发现问题。
缩短项目周期。
能够发现更底层的bug,减少开发成本。
5、URL的组成(统一资源定位符)
定义:URL是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL ,是表示资源位置的;
书写格式: 协议://域名(或IP):端口号/路径?参数
eg:http://www.ifeng.com:80/index.html
6、接口测试内容
业务功能逻辑:正常场景、异常场景
边界分析测试:业务规则边界分析、输入输出参数边界分析
参数组合测试
异常情况测试:重复提交、并发测试、事务测试、分布式测试、环境测试
性能测试:响应时间、吞吐量、并发数、服务器资源使用率
安全测试:敏感信息是否加密、SQL注入等
7、 测试工具
postman(功能)、Jmeter(功能、性能)、soupUI、loadRunner(性能)、RebotFramework(http协议)
二、代码测试接口
import unittest # 用例管理
import requests
import json
class Chuciceshi():
def setUp(self):
pass
def test_1(self):
url='http://testsupport-be.haofenshu.com/v1/schools/infos'
head={
'Cookie': "yz-test-session-id=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcGVyYXRvciI6ImxpeGlhbndlaSIsInJvbGVUeXBlIjoxLCJpYXQiOjE1MzkwNTgxOTYsImV4cCI6MTU3MDU5NDE5Nn0.GzWTsN7Sb9W85R1Wem8_HNV7e8oXTQSCPdvODb5f_GA"
}
qwe={'filterInput':'北京'} #参数写成组
# 如果请求方法是post时,参数在body中,即把params换为data
html = requests.get(url=url,headers=head,params=qwe)
# 当你得到的响应为json字符串时,可以使用json函数,将其变为字典
html = html.json()
print(html)
# 验证返回结果的正确性
# assert html['code']==0 python自带的简单的验证方法
self.assertEqual(html['code'],0) #验证两个数据是否相等
self.assertIn('北京',html['data'][0]['schoolName']) #验证前一个字符串是否在第二个字符串内
unittest.main()