Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >接口自动化通用验证类

接口自动化通用验证类

作者头像
FunTester
发布于 2019-09-27 03:26:24
发布于 2019-09-27 03:26:24
46700
代码可运行
举报
文章被收录于专栏:FunTesterFunTester
运行总次数:0
代码可运行

在做自动化的过程中,一定会遇到很多验证的点,但是有些验证功能是通用的,所以我封装了一个通用的验证类,来解决重复验证的问题,之前也写过一个,现在这个增加了一下数组的验证,还有一些隐藏bug的修复。话不多说,分享代码,供大家参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.fun.frame;

import com.fun.base.bean.RequestInfo;
import com.fun.base.interfaces.IBase;
import com.fun.frame.httpclient.FanLibrary;
import com.fun.utils.Regex;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 通用验证方法封装
 */
public class Verify extends SourceCode {

    private static Logger logger = LoggerFactory.getLogger(Verify.class);

    /**
     * 断言的json对象
     */
    private JSONObject verifyJson;

    /**
     * 断言的code码
     */
    private int code;

    /**
     * 断言的json对象分行解析
     */
    private List<String> lines = new ArrayList<>();

    public Verify(JSONObject jsonObject) {
        this.verifyJson = jsonObject;
        this.lines = parseJsonLines(jsonObject);
    }

    /**
     * 获取 code
     *<p>这里的requestinfo主要的目的是为了拦截一些不必要的checkcode验证的,主要有black_host名单提供,在使用时,注意requestinfo的非空校验</p>
     *
     * @return
     */
    public int getCode() {
        return FanLibrary.getiBase().checkCode(verifyJson, null);
    }


    /**
     * 校验code码是否正确,==0
     *
     * @return
     */
    public boolean isRight() {
        return 0 == this.getCode();
    }

    /**
     * 获取节点值
     *
     * @param key 节点
     * @return 返回节点值
     */
    public String getValue(String key) {
        int size = lines.size();
        for (int i = 0; i < size; i++) {
            String line = lines.get(i);
            if (line.startsWith(key + ":"))
                return line.replaceFirst(key + ":", EMPTY);
        }
        return EMPTY;
    }

    /**
     * 校验是否包含文本
     *
     * @param text 需要校验的文本
     * @return 返回 Boolean 值
     */
    public boolean isContains(String... text) {
        boolean result = true;
        String content = verifyJson.toString();
        int length = text.length;
        for (int i = 0; i < length; i++) {
            if (!result) break;
            result = content.contains(text[i]) & result;
        }
        return result;
    }

    /**
     * 校验节点值为数字
     *
     * @param value 节点名
     * @return 返回 Boolean 值
     */
    public boolean isNum(String... value) {
        boolean result = true;
        int length = value.length;
        for (int i = 0; i < length; i++) {
            String key = value[i] + ":";
            if (!verifyJson.toString().contains(value[i]) || !result)
                return false;
            for (int k = 0; k < lines.size(); k++) {
                String line = lines.get(k);
                if (line.startsWith(key)) {
                    String lineValue = line.replaceFirst(key, EMPTY);
                    result = isNumber(lineValue) & result;
                }
            }
        }
        return result;
    }

    /**
     * 校验节点值不为空
     *
     * @param keys 节点名
     * @return 返回 Boolean 值,为空返回false,不为空返回true
     */
    public boolean notNull(String... keys) {
        boolean result = true;
        for (int i = 0; i < keys.length; i++) {
            String key = keys[i] + ":";
            if (!verifyJson.toString().contains(keys[i]) || !result)
                return false;
            for (int k = 0; k < lines.size(); k++) {
                String line = lines.get(k);
                if (line.startsWith(key)) {
                    String lineValue = line.replaceFirst(key, EMPTY);
                    result = lineValue != null & !lineValue.isEmpty() & result;
                }
            }
        }
        return result;
    }

    /**
     * 验证是否为列表,根据字段后面的符号是否是[
     *
     * @param key 返回体的字段值
     * @return
     */
    public boolean isArray(String key) {
        String json = verifyJson.toString();
        int index = json.indexOf(key);
        char a = json.charAt(index + key.length() + 2);
        return a == '[';
    }

    /**
     * 验证是否是json,根据后面跟的符号是否是{
     *
     * @param key 返回体的字段值
     * @return
     */
    public boolean isJson(String key) {
        String json = verifyJson.toString();
        int index = json.indexOf(key);
        char a = json.charAt(index + key.length() + 2);
        if (a == '{')
            return true;
        return false;
    }

    /**
     * 是否是Boolean值
     *
     * @return
     */
    public boolean isBoolean(String... value) {
        boolean result = true;
        int length = value.length;
        for (int i = 0; i < length; i++) {
            String key = value[i] + ":";
            if (!verifyJson.toString().contains(value[i]) || !result)
                return false;
            for (int k = 0; k < lines.size(); k++) {
                String line = lines.get(k);
                if (line.startsWith(key)) {
                    String lineValue = line.replaceFirst(key, EMPTY);
                    result = Regex.isRegex(lineValue, "^(false)|(true)$") & result;
                }
            }
        }
        return result;
    }

    /**
     * 验证正则匹配结果
     *
     * @param regex
     * @return
     */
    public boolean isRegex(String regex) {
        String text = verifyJson.toString();
        return Regex.isRegex(text, regex);
    }

    /**
     * 解析json信息
     *
     * @param response json格式的响应实体
     * @return json每个字段和值,key:value形式
     */
    public static List<String> parseJsonLines(JSONObject response) {
        String jsonStr = response.toString();// 先将json对象转化为string对象
        jsonStr = jsonStr.replaceAll(",", LINE);
        jsonStr = jsonStr.replaceAll("\"", EMPTY);
        jsonStr = jsonStr.replaceAll("\\\\/", OR);
        jsonStr = jsonStr.replaceAll("\\{", LINE);
        jsonStr = jsonStr.replaceAll("\\[", LINE);
        jsonStr = jsonStr.replaceAll("}", LINE);
        jsonStr = jsonStr.replaceAll("]", LINE);
        List<String> jsonLines = Arrays.asList(jsonStr.split(LINE));
        return jsonLines;
    }
}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
网页音乐播放器
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/147933.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/02
3.7K0
网页音乐播放器
将json数据格式化输出到控制台
在做接口测试的过程中,大多数数据交互都使用json格式,但是在控制台输出json的效果远不如浏览器插件实现的漂亮。在找了一些资料后,决定自己写一个格式化输出json信息到控制台的方法,经过一些尝试已经完成。分享如下:
FunTester
2019/08/08
1.9K0
自动化项目基类实践--视频演示
接口测试中业务验证 http://mpvideo.qpic.cn/0bf2raaagaaaauaafxudrvpfbcgdaoeaaaya.f10002.mp4?dis_k=c999f00b893c9
FunTester
2020/04/08
3230
Java实用工具类四:StringUtils工具类
此文仅对自己工作中用到的类进行总结,方便以后的使用。 package com.cn.hnust.util; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRe
芈亓
2022/06/17
7540
java解析json转Map
前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:
全栈程序员站长
2022/07/02
3.4K0
[PHP] java读取PHP接口数据
和安卓是一个道理,读取json数据 PHP文件: <?php class Test{ //日志路径 const LOG_PATH="E:\phpServer\Apache\logs\\
唯一Chat
2019/09/10
1.9K0
[PHP] java读取PHP接口数据
将swagger文档自动变成测试代码
在看过一本《代码不朽》的书之后,深受启发,要编写高质量的代码,可维护性一定要弄好,经过尝试,已经将原来的magic()方法修改成为N个短方法,代码逻辑一目了然,分享解耦之后的代码。
FunTester
2019/08/19
2.4K0
Android工具类整合「建议收藏」
Android-JSONUtil工具类 常用的Json工具类,包含Json转换成实体、实体转json字符串、list集合转换成json、数组转换成json
全栈程序员站长
2022/08/31
1.1K0
教你怎么编写高效的JSON工具类
在开发过程中,极有可能会用到JSON数据的传输。这不,笔者在前段时间的开发过程中在http请求后台数据时就用到了JSON与对象和集合之间的转换。在JSON数据组装的过程中,你还在怕一个个字符串拼接出错而烦恼吗?在这里笔者整理了一个完整的工具类,能够帮助大家快速而高效的开发,妈妈再也不用担心我在这一块出错了。
格姗知识圈
2019/07/19
1.2K0
JsonPath验证类既Groovy重载操作符实践
在使用?JsonPath工具类封装进行接口响应的验证过程中,由于使用原生的JsonPath的API获取到的值默认是object,如果需要转成其他类型需要多写一些代码。 这一点对于将要提供给前端的工具类
FunTester
2020/09/27
6610
C#操作json的通用帮助类
using System; using System.Data; using System.Text; using System.Collections.Generic; using System.Reflection; using System.Data.Common; using System.Collections; using System.IO; using System.Text.RegularExpressions; using System.Runtime.Serialization.Jso
用户7108768
2021/11/02
1.4K0
Ping++ 支付接口对接
一、请求charge对象 package com.bra.modules.util.pingplusplus; import com.bra.common.utils.SystemPath; import com.pingplusplus.Pingpp; import org.springframework.stereotype.Service; import java.io.File; /** * Created by Afon on 16/4/26. */ @Service public cl
week
2018/08/27
1.5K0
开源 - Java接口API授权认证与规范
1.防止未授权的用户,非法获得不该他所能看到的数据 2.数据的安全性,防止被同行或者有心人士,通过接口爬取重要数据 3.防止接口大批量灌水,如果提前设置好Token失效时间,即使拿到了认证密文也只是短时间内起效(况且密文能不能解析还是一回事)
Parker
2020/07/22
3.4K0
开源 - Java接口API授权认证与规范
七夕,带你生撸一个验证框架
你们之中大概率早已练就了代码的拷贝、粘贴,无敌的码农神功,其实做久了业务功能开发,练就这两个无敌神功,那是迟早的事儿。今天先抛一个小问题,来打通你的任督二脉,就是很好奇的问一下:业务功能开发中,输入参数校验占了你多少时间呢?有没有考虑如何进行验证模块化、通用化?
一猿小讲
2019/08/16
5800
七夕,带你生撸一个验证框架
Java调用第三方接口示范
【1】准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTemplate来调用,上面有调用接口的方法【分为Get和Post方式的有参和无参调用】:
Java廖志伟
2021/01/29
1.5K0
自动化测试项目基础--视频讲解
今天开始分享如何写一个自动化测试项目。对于一个长期的自动化测试项目,我的思路如下:现有一个项目的基类,实现对获取请求对象和发送解析请求对象的封装,自定义用户信息(例如id,uid,password)以及验证信息,自定义header和cookie处理方法,自定义通用验证方法和获取业务响应状态码方法,以及包括一些其他需要自定义的功能。然后每个业务的模块类继承于这个基类,就只专注于接口的参数和响应信息即可。
FunTester
2020/04/02
3540
30个类手写Spring核心原理之MVC映射功能(4)
接下来我们来完成MVC模块的功能,应该不需要再做说明。Spring MVC的入口就是从DispatcherServlet开始的,而前面的章节中已完成了web.xml的基础配置。下面就从DispatcherServlet开始添砖加瓦。
Tom弹架构
2021/12/14
7200
基于java的动态口令_java动态口令登录实现过程详解
private static final String routing = “/v1.0/sectoken/otp_validation”;
全栈程序员站长
2022/11/15
1.5K0
18.手写Spring MVC
Serviet 的生命周期由 init()到 service()再到 destory()组成, destory()方法我们 不做实现。
编程之心
2020/08/12
6020
软件工程个人作业01
题目:      像二柱子那样,花二十分钟写一个能自动生成三十道小学四则运算题目的 “软件”,要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性)、题目避免重复、可定制出题的数量。(
CN_Simo
2017/12/26
6770
软件工程个人作业01
相关推荐
网页音乐播放器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验