柚子快报邀请码778899分享:接口测试笔记二
上一篇
接口测试笔记一
为什么开发测试框架?
测试工具的局限性
维护成本的增加
这里使用python,也可以选用自己熟悉的语言
1.安装requests
pip install requests
2.基本请求
get请求,getTest.py
import requests
url_index='http://127.0.0.1:8081/api/files/detail?id=1'
response_index = requests.get(url_index)
print('Response 内容:'+response_index.text)
post请求
需要通过 Body 传递参数
postTest.py
import requests
url_search = 'http://127.0.0.1:8081/api/files/searchByIds'
# 拼凑 body 的参数
payload = {
'ids':(None, "1,2")
}
# 调用 requests 类的 post 方法,也就是 HTTP 的 POST 请求方式,
# 访问了 url_search,其中通过将 payload 赋值给 data 完成 body 传参
response_search = requests.post(url_search, data=payload)
print('Response 内容:' + response_search.text)
3.抽象
提取公共部分,common.py
import requests
# 定义一个 common 的类,它的父类是 object
class Common(object):
# common 的构造函数
def __init__(self,url_root):
# 被测系统的跟路由
self.url_root = url_root
# get 请求,uri 是访问路由,params 是 get 请求的参数,如果没有默认为空
def get(self, uri, params=''):
# 拼凑访问地址
url = self.url_root + uri + params
# 通过 get 请求访问对应地址
res = requests.get(url)
# 返回 request 的 Response 结果,类型为 requests 的 Response 类型
return res
# post 方法,uri 是访问路由,params 是 post 请求需要传递的参数,如果没有参数这里为空
def post(self, uri, params=''):
# 拼凑访问地址
url = self.url_root + uri
if len(params) > 0:
# 如果有参数,那么通过 post 方式访问对应的 url,并将参数赋值给 requests.post 默认参数 data
# 返回 request 的 Response 结果,类型为 requests 的 Response 类型
res = requests.post(url, data=params)
else:
# 如果无参数,访问方式如下
# 返回 request 的 Response 结果,类型为 requests 的 Response 类型
res = requests.post(url)
return res
修改getTest.py
from common import Common
url_root="http://127.0.0.1:8081/api/"
uri='files/detail?id=1'
# 实例化Common
comm = Common(url_root)
response_index = comm.get(uri)
print('Response 内容:'+response_index.text)
修改postTest.py
from common import Common
url_root="http://127.0.0.1:8081/api/"
uri='files/searchByIds'
payload = {
'ids':(None, "1,2")
}
# 实例化Common
comm = Common(url_root)
response_search = comm.post(uri,payload)
print('Response 内容:' + response_search.text)
测试框架就是在测试脚本中不断抽象和封装得来的
(1)不断写测试脚本
(2)观察已写好的测试脚本,找出重复部分,进行封装
(3)重复(1)、(2)
4.支持Restful
用java写restful接口
package com.example.demo.controller;
import com.example.demo.model.Users;
import com.example.demo.repository.UsersRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/user")
public class UsersController {
@Autowired
UsersRepository usersRepository;
@GetMapping("/list")
public List
List
return users;
}
/**
* 新增
*/
@PostMapping
public Users add(@RequestBody Users user) {
usersRepository.save(user);
return user;
}
/**
* 修改
*/
@PutMapping
public Users edit(@RequestBody Users user) {
usersRepository.save(user);
return user;
}
/**
* 删除
*/
@DeleteMapping("/{id}")
public boolean remove(@PathVariable Integer id) {
usersRepository.deleteById(id);
return true;
}
}
View Code
重写common.py
import requests
# 定义一个 common 的类,它的父类是 object
class Common(object):
# common 的构造函数
def __init__(self,url_root):
# 被测系统的跟路由
self.url_root = url_root
# 封装get 请求,uri 是访问路由,params 是 get 请求的参数,如果没有默认为空
def get(self, uri, params=''):
# 拼凑访问地址
url = self.url_root + uri + params
# 通过 get 请求访问对应地址
res = requests.get(url)
# 返回 request 的 Response 结果,类型为 requests 的 Response 类型
return res
# 封装post 方法,uri 是访问路由,params 是 post 请求需要传递的参数,如果没有参数这里为空
def post(self, uri, headers='',params=''):
# 拼凑访问地址
url = self.url_root + uri
if len(params) > 0:
# 如果有参数,那么通过 post 方式访问对应的 url,并将参数赋值给 requests.post 默认参数 data
# 返回 request 的 Response 结果,类型为 requests 的 Response 类型
res = requests.post(url, headers=headers,data=params)
else:
# 如果无参数,访问方式如下
# 返回 request 的 Response 结果,类型为 requests 的 Response 类型
res = requests.post(url, headers=headers)
return res
def put(self,uri, headers='',params=None):
'''
封装put 方法,uri 是访问路由,params 是 put 请求需要传递的参数,如果没有参数这里为空
:param uri: 访问路由
:param params: 传递参数,string 类型,默认为 None
:return: 此次访问的 response
'''
url = self.url_root+uri
if params is not None:
# 如果有参数,那么通过 put 方式访问对应的 url,并将参数赋值给 requests.put 默认参数 data
# 返回 request 的 Response 结果,类型为 requests 的 Response 类型
res = requests.put(url, headers=headers, data=params)
else:
# 如果无参数,访问方式如下
# 返回 request 的 Response 结果,类型为 requests 的 Response 类型
res = requests.put(url)
return res
def delete(self,uri,params=None):
'''
封装delete 方法,uri 是访问路由,params 是 delete 请求需要传递的参数,如果没有参数这里为空
:param uri: 访问路由
:param params: 传递参数,string 类型,默认为 None
:return: 此次访问的 response
'''
url = self.url_root + uri
if params is not None:
# 如果有参数,那么通过 delete 方式访问对应的 url,并将参数赋值给 requests.delete 默认参数 data
# 返回 request 的 Response 结果,类型为 requests 的 Response 类型
res = requests.delete(url, data=params)
else:
# 如果无参数,访问方式如下
# 返回 request 的 Response 结果,类型为 requests 的 Response 类型
res = requests.delete(url)
return res
getTest.py
from common import Common
url_root="http://127.0.0.1:8080"
uri='/user/list'
# 实例化Common
comm = Common(url_root)
response_index = comm.get(uri)
print('Response 内容:'+response_index.text)
postTest.py
from common import Common
import json
url_root="http://127.0.0.1:8080"
uri='/user'
payload = "{\"name\": \"EFG\",\"age\": 30}"
headers = {
'Content-Type': 'application/json'
}
# 实例化Common
comm = Common(url_root)
response_search = comm.post(uri,headers,payload)
print('Response 内容:' + response_search.text)
putTest.py
from common import Common
url_root="http://127.0.0.1:8080"
uri='/user'
payload = "{\"id\": 3,\"age\": 22,\"name\": \"xyz\"}"
headers = {
'Content-Type': 'application/json'
}
# 实例化Common
comm = Common(url_root)
response_search = comm.put(uri,headers,payload)
print('Response 内容:' + response_search.text)
delTest.py
from common import Common
url_root="http://127.0.0.1:8080"
uri='/user/2'
# 实例化Common
comm = Common(url_root)
response_search = comm.delete(uri)
print('Response 内容:' + response_search.text)
补充:
加快框架的生成
可以利用Postman 生成接口测试脚本
改写通过工具导出的脚本
https://gitee.com/babybeibeili/testFrame.git
柚子快报邀请码778899分享:接口测试笔记二
发表评论