前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​反转?美国国家安全局雇员向外国特工泄密,对方实为FBI卧底
当地时间9月29日,据The Record报道,一名30岁的前国家安全局(NSA)雇员在联邦法院被指控,试图向外国政府代表出售与国家网络行动有关的敏感信息。
FB客服
2022/11/14
3590
​反转?美国国家安全局雇员向外国特工泄密,对方实为FBI卧底
FreeBuf 周报 | 马斯克血洗推特安全部门;新形式钓鱼软件针对 Python开发人员
各位 Buffer 周末好,以下是本周「FreeBuf周报」,我们总结推荐了本周的热点资讯、安全事件、一周好文和省心工具,保证大家不错过本周的每一个重点! 热点资讯 1、马斯克血洗Twitter,网络安全部门集体被裁 根据Twitter新任首席信息安全官Lea Kissner发布的消息,原有的网络安全部门集体被裁撤。 2、头铁!医疗保险巨头拒绝向黑客支付赎金 澳大利亚最大的医疗保险公司 Medibank 明确表示,不会向对其发动网络攻击并窃取内部数据的犯罪分子支付赎金。 3、将机密藏在三明治
FB客服
2023/03/29
5500
FreeBuf 周报 | 马斯克血洗推特安全部门;新形式钓鱼软件针对 Python开发人员
全解美军“水下黑客平台”安纳波利斯号核潜艇
7月底,据《华盛顿邮报》报道,两位美国海军官员在华盛顿国际战略研究会议上声称,潜艇是美国网络战略的重要组成部分,它们保护国家免受网络攻击,其在执行任务过程中发挥着重要作用。 美国潜艇项目执行官、海军少将迈克尔贾巴利说:“它们具有一种令我们高度重视的攻击能力,在这方面,我不能说太多,只能说这类潜艇活跃于前沿阵地,在最高技术层面上积极地做着它们应该做的事情。” 另外,两位海军官员还谈到水下无人航行器配合潜艇对敌方海域进行干扰或黑客行动,以扩大潜艇网络作战系统的能力。而“安纳波利斯”号核潜艇(USS Anna
FB客服
2018/02/08
1.4K0
全解美军“水下黑客平台”安纳波利斯号核潜艇
技术天才、无人驾驶元老承认窃取谷歌机密给Uber!面临2年监禁
上周,硅谷顶尖自动驾驶技术工程师、前谷歌高管Anthony Levandowski承认了他此前从谷歌窃取了关于自动驾驶技术的商业机密。
大数据文摘
2020/04/01
3490
最小年龄仅5岁!盘点全球最“天才”少年黑客 TOP 10
你还能想起自己8岁的时候,每天都在玩什么吗?可能是在楼下和小朋友一起捉迷藏?在家追一本连载的漫画书?又或者在电脑上玩种菜偷菜的小游戏?
FB客服
2023/08/08
1.1K0
最小年龄仅5岁!盘点全球最“天才”少年黑客 TOP 10
苹果汽车项目前员工认罪!跳槽小鹏汽车前,窃取了无人驾驶机密
8月23日消息,根据美国加州北区地区法院于当地时间8月22日公布的一份文件显示,针对苹果2018年7月12日起诉华裔前员工张晓浪(Xiaolang Zhang)窃取其无人驾驶机密案的指控,张晓浪已经承认了其中的一项指控,并签署了认罪协议。法院将于2022年11月14日下午1:30进行重新判刑。
芯智讯
2022/08/25
4060
苹果汽车项目前员工认罪!跳槽小鹏汽车前,窃取了无人驾驶机密
卧底揭秘:英国竟是印度黑客雇佣行业的大金主
非法黑客,也被称为“雇佣黑客”,活跃在世界各地。印度雇佣黑客在国际上十分活跃,收取高额费用入侵重要国家和人物的电子邮件和手机。 11月6日,《星期日泰晤士报》(The Sunday Times)和调查新闻局(Bureau of Investigative Journalism)的一项卧底调查,通过一个印度“雇佣黑客”团伙内部泄露的数据库,揭露了一些印度黑客替伦敦的企业情报公司入侵英国企业、记者和政界人士的电子邮件账户等攻击行为。 这些卧底爆料在西方企业情报圈引起了恐慌,因为许多企业都曾使用过印度雇佣黑客,尤
FB客服
2023/03/29
5030
卧底揭秘:英国竟是印度黑客雇佣行业的大金主
那个靠大数据抓到拉登的公司
据说,一家名叫帕兰提尔(Palantir)的初创公司帮助美军捕杀了奥萨马·本·拉登(Osama bin Laden)。自从这个传闻开始传播以来,阿历克斯·卡普(Alex Karp)就没有了太多独处的时间。 这位帕兰提尔公司的CEO现年45岁,身材消瘦,乱蓬蓬的卷发给人以头重脚轻之感。 7月份一个艳阳高照的早晨,他在斯坦福大学青草葱葱的山坡上漫步,不远处耸立着外号叫“大盘子”的巨型卫星天线。这是他特别喜欢的沉思时刻。 但他的独处在某种程度上被“迈克”(Mike)打破了。这位沉默寡言的海军陆战队退役士兵身高
CSDN技术头条
2018/02/09
8190
那个靠大数据抓到拉登的公司
国际知名“青少年黑客”盘点
全美大学生网络防御大赛(NCCDC)是一项年度盛会,旨在让大学生参与到网络安全活动中来。像往常一样,今年,这些孩子正投身于这场激烈的网络防御战中,但是有变化的是,其中许多竞争者过去都有过黑帽攻击经历,他们入侵的系统包括胰岛素泵、航空电子系统以及生啤保鲜机系统等。 当然,年轻人参与黑客攻击的历史已经相当长远,提到“少年天才”不由得脑海里就会浮现很多面容、名字以及他们不朽的事迹。这是一篇拜会“黑客祖师爷”的文章。让我们回到现代互联网还没有成型的那个年代,看看那些注定不凡的天才少年们: 1. James Ko
FB客服
2018/02/26
1.3K0
国际知名“青少年黑客”盘点
希拉里PK川普激战正酣,看看黑客如何“干预”美国总统大选
昨天的美国大选第二轮辩论,相信大家都有所耳闻,撕得那是一个风生水起,好生热闹!不过今年除了两位总统候选人备受关注之外,黑客攻击干扰大选的新闻也是屡屡见诸报端,引发了激烈的讨论。 美国大选流程 在谈黑客
FB客服
2018/02/09
9480
希拉里PK川普激战正酣,看看黑客如何“干预”美国总统大选
中东泥潭里的伊朗,网络战能力是否被严重低估?
最近的网络空间,并不安宁。美国总统特朗普在接受媒体采访时证实,他于2018年批准了对俄罗斯互联网研究院的网络攻击,发动攻击的正是由特朗普在2017年下令组建的美军网络司令部。
FB客服
2020/07/28
6850
【史上最全】计算机的编年史
前几天我写算力简史的时候,顺便整理了一份计算机技术的编年史(将近一万字)。今天发给大家,以供参考。
鲜枣课堂
2023/08/21
1.1K0
【史上最全】计算机的编年史
计算机的发展史,让你想到了什么?
对世界保持一份好奇心很重要,为什么这么说呢?有天使投资人问比尔盖茨说:你最害怕什么?比尔盖茨回答很妙,他所:我最怕那些躲在车库里头捣鼓新玩意儿的年轻人。这显然是一个很幽默的回答。但是你觉得他说的有道理吗?
杨永贞
2022/10/31
1K0
计算机的发展史,让你想到了什么?
“超级天才”冯·诺依曼与原子弹的诞生
20世纪40年代的约翰·冯·诺伊曼(John von Neumann,1903-1957)。图源:维基百科
用户9861443
2023/12/19
4190
“超级天才”冯·诺依曼与原子弹的诞生
世界算力简史(上)
1946年2月14日,在美国宾夕法尼亚州东南部的费城,人们正在像以往一样正常工作和生活。
鲜枣课堂
2023/08/21
4010
世界算力简史(上)
曾凭借大力投资科学引领全球,美国的创新引擎是如何失速的?
1940年6月,世界的未来陷于僵持之中。德国一个月前攻陷了荷兰、比利时和法国,纳粹的胜利让人触目惊心。凭借军事的新技术和新战略,德国演示了一种新的战争形式:闪电战、重武器和空中优势。从理论上来说,根据传统思维,英、法联军应该能够阻挡德军的进攻。然而,仅仅六周时间,英军被打散,连滚带爬地实行敦刻尔克大撤退。巴黎失陷。
大数据文摘
2021/07/06
2900
2022 年全球数据泄露事件 TOP 100 | FreeBuf 年度盘点
数字化时代,数据已然是一种战略资源,是企业发展经营的“催化剂”,企业拥有的数据规模以及数据处理能力,决定其是否具备核心竞争力,因此数据成为了网络犯罪分子眼中的“摇钱树”。
FB客服
2023/02/10
2.2K0
2022 年全球数据泄露事件 TOP 100 | FreeBuf 年度盘点
算力简史(完整版)
引言:今天这篇文章,我将给大家详细介绍一下人类算力的演进过程。这是一段波澜壮阔的历史,值得我们驻足与回忆。
鲜枣课堂
2023/11/17
6020
算力简史(完整版)
重温计算机简史:从石头计数到计算机
计算机始祖 谁都知道,电脑的学名叫做电子计算机。以人类发明这种机器的初衷,它的始祖应该是计算工具。英语里“Calculus”(计算)一词来源于拉丁语,既有“算法”的含义,也有肾脏或胆囊里的“结石”的意思。远古的人们用石头来计算捕获的猎物,石头就是他们的计算工具。著名科普作家阿西莫夫说,人类最早的计算工具是手指,英语单词“Dight”既表示“手指”又表示“整数数字”;而中国古人常用“结绳”来帮助记事,“结绳”当然也可以充当计算工具。石头、手指、绳子……,这些都是古人用过的“计算机”。 不知何时,许多国家的人
大数据文摘
2018/05/24
1.4K0
社会工程:攻击系统、国家和社会(一)
社会工程是一种极其有效的攻击过程,超过 80% 的网络攻击,其中超过 70% 是来自国家级别的,都是通过利用人类而不是计算机或网络安全漏洞发起和执行的。因此,要构建安全的网络系统,不仅需要保护构成这些系统的计算机和网络,还需要对其人类用户进行安全程序的教育和培训。
ApacheCN_飞龙
2024/05/24
2880
推荐阅读
相关推荐
​反转?美国国家安全局雇员向外国特工泄密,对方实为FBI卧底
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验