柚子快报邀请码778899分享:接口测试笔记二

http://www.51969.com/

上一篇

接口测试笔记一

为什么开发测试框架?

  测试工具的局限性

  维护成本的增加

这里使用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() {

List users = usersRepository.findAll();

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分享:接口测试笔记二

http://www.51969.com/

查看原文