前言:

    在当前开放互联的大环境下,接口互通成了最最普通常见数据通讯与交互的一种方式;接口测试的重要性也是不言而喻,但却成了普通功能测试人员的一道屏障;特别是服务端的接口验证更是麻烦;这里抛砖引玉希望更多童鞋参与多多讨论。

场景&描述:

    c1->s1->s2

          s1 <-s2

协议:http

c端,发起c1(pay)请求,服务端处理完毕,通过s1接口把(pay)请求支付接口告诉指定s2服务地址;s2服务地址解析s1接口内容,正常返回SUCCESS,异常返回FAILURE;s1收到s2返回内容做对应业务处理。

接口消息格式:json,签名验签rsa标准算法,消息体url编码。

请求方式:post

 

测试对象:

   s1接口

 

测试范围:

接口测试之常规测试维度,从宏观到微观一一细分拆借大概思路:消息发送方式、消息体是否为null、消息体格式是否正确、消息解密是否正确、消息体中json体key键检查(必填值是否缺省、缺省值是否存在、是否多多余key键)、消息体中json体values值检查(必填值检查是否缺省、缺省值是否存在、值类型检查,特别是数字类型的,比如交易金额啥的)。

接口测试之安全维度,ip黑白名单,消息体参数注入,摘要解密算法研究等。

1.消息发送方式

2.消息体是否为null和格式检查

3.json,key键必填字检查

4.json,values值检查

5.业务数据检查,比如收到SUCCESS检查。

6.其它

 

实现技术分析:

如果只要验证第5点,简单的只要模拟s2,最快速高效的方法,直接在tomcat下,新建一个工程,创建一个html文件,内容为SUCCESS或FAILURE;然后s1接口直接往这个地址发送就好(http协议)。

http协议,后台实现,最方便的还是java,也有python的,依赖的包太多,看个人条件选择;如果是soket套接字,建议与加密解密类语言保持一致比较好,因为解密太折腾人了,哎。

这里选择了一个java,servlet来实现。

再回头看s1接口,所以的参数都不是固定的,每次发生请求的参数都是动态的,这样的话,自己去实现这个servlet的时候,参数化的部分,就直接考虑连接db,这样就不需要考虑s1接口传入固定的值,动态的去db查询s1接口参数相关数据信息(特别是解密,与json,values值验证,和功能业务特性,每次填写固定参数值肯定不靠谱)。

-- jdbc

 

package com.iapppay.jdbc;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class mysqljdbc {
    public Connection conn;
    public Statement st;
    public ResultSet rs;
    
    public Connection getConn() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://192.168.0.151/iapppay?useUnicode=true&characterEncoding=utf-8","root","aibei1010");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
    
    public String getappkey(String appid,String key){
        String appkey =null;
        //String sql = "select waresid,platpkey,platvkey,cppkey,cpvkey from wares where waresid = '3000713545';";
        String sql = "select waresid,platpkey,platvkey,cppkey,cpvkey from wares where waresid = "+appid+"";
        conn = getConn();
        try{
             st = conn.createStatement();
             rs = st.executeQuery(sql);
             while(rs.next()){
                 appkey = rs.getString(key);
             }
            
        }catch(SQLException e)
        {
            e.printStackTrace();
        }
        return appkey;
        
    }
    
    public void insertData(String data,String rmark,String status){
        int r = 0;
        String sql = "insert into cptest values(null,"+"'"+data+"',"+"'"+rmark+"'," +"'"+status+ "');";
        conn = getConn();
        try{
             st = conn.createStatement();
             r = st.executeUpdate(sql);
             if(r != '0'){
                 System.out.println("新增数据成功过");
             }else
             {
                 System.out.println("新增数据成失败");
             }
            
        }catch(SQLException e)
        {
            e.printStackTrace();
        }
        
    }
    
    public String getStringData(String data)
    {
        String dataString = null;
        for (int i = 0;i<data.length();i++)
                {
                dataString += data.charAt(i);
                dataString = data.replace("\"","\\'"); 
                }
        return dataString;
    }
 
    
}
View Code

相关文章:

  • 2021-06-09
  • 2022-02-14
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-27
  • 2022-12-23
猜你喜欢
  • 2021-12-25
  • 2021-04-17
  • 2021-12-12
  • 2022-01-11
  • 2022-12-23
  • 2021-11-15
  • 2022-12-23
相关资源
相似解决方案