接口测试笔记二详解编程语言

上一篇

接口测试笔记一

为什么开发测试框架?

  测试工具的局限性

  维护成本的增加

这里使用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<Users> list() { 
 
        List<Users> 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 生成接口测试脚本

    改写通过工具导出的脚本

接口测试笔记二详解编程语言

 IT虾米网

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/20484.html

(0)
上一篇 2021年7月19日 23:28
下一篇 2021年7月19日 23:28

相关推荐

发表回复

登录后才能评论