基于Java+HttpClient+TestNG的接口自动化测试框架(六)-------随机函数的处理

  我们之前使用接口类及接口实现类的方式,来定义了我们使用的工具类。

  而所有的工具类中,随机函数是比较难于处理的。因为随机的对象不明确,随机的个数不明确。我们可以使用定义随机类的方式,来简单而快速的处理我们的随机对象生成的需要。

  首先,我们先定义一个randomUtil的类,在这个类中,我们可以将想生成的随机函数进行具体的定义。在此,我们举几个例子。比如,随机生成一个整数,随机生成一个定长(或不定长)的,带汉字(或不带汉字)的字符串,随机生成一个数组等等。

来看一下具体的RandomUtil类的代码:

import java.util.Random;

public class RandomUtil {
    //定义字母和数字
    public static String randomBase = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    public static String randomNumberBase = "0123456789";

    //Unicode 基本汉字编码范围0x4e00~0x9fa5 共 20902个,这个是从网上查到的。因此,我们要把这个随机的范围给计算出来。
    private final static int HANZI_LENGTH = 20902 ; 

    public static Random random = new Random();  

    /**
     * 随机生成一个汉字
     * @return
     */
    protected static char getRandomHanZi() {
        Random ran = new Random();     //汉字编码从0x4e00开始到后面的20902之间
        return (char) (0x4e00 + ran.nextInt(HANZI_LENGTH));
    }

    /**
     * 随机生成一个字母
     * @return
     */
    protected static char getRandomStr() {
        Random ran = new Random();
        return (char) randomBase.charAt(ran.nextInt(62));
    }

    /**
     * 随机生成一个带有中文的字符串
     * @param length为字符串长度的参数
     * @return
     */
    public static String getRandomText(int length) {
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {       //使用一个随机数字作为开关
            int randomNum = random.nextInt(2);
            char ch = 0 ;
            if (randomNum==0) {//生成汉字
                ch = getRandomHanZi();
            }else if (randomNum==1) {//生成数字或者字符
                ch = getRandomStr();
            }
            sb.append(String.valueOf(ch));
        }
        return sb.toString();
    }

     /**
     * 随机生成一个带有中文的字符串
     * @param length为字符串长度的参数,false为字符串,true为数字
     * @return
     */

public static String getRandom(int length, boolean onlyNumber) {
        String base;
        if (onlyNumber) {
            base = randomNumberBase;
        } else {
            base = randomBase;
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            char chr;
            do {
                int number = random.nextInt(base.length());
                chr = base.charAt(number);
            } while (i==0&&chr==‘0‘) ;//第一个字符不能为0,

            sb.append(chr);
        }
        return sb.toString();
    }

    public static String getRandomArr(int arrLength, int length, boolean flag) {
        StringBuffer sBuffer = new StringBuffer();
        for (int i = 0; i < arrLength; i++) {
            sBuffer.append(getRandom(length, flag)).append(",");
        }
        int leng = sBuffer.toString().length();
        return sBuffer.toString().substring(0, leng-1);
    }

    /**
     * 生成定长的字符串数组
     * @param arrLength  数组长度
     * @param paramStr
     * @return
     */
    public static String generateStrArr(int arrLength, String paramStr) {
        StringBuffer sBuffer = new StringBuffer();
        for (int i = 0; i < arrLength; i++) {
            sBuffer.append("\"").append(paramStr).append("\"").append(",");
        }
        int leng = sBuffer.toString().length();
        return sBuffer.toString().substring(0, leng-1);
    }

}

  在这个随机类中,我们定义了很多关于随机对象生成的方法,并确切定义了参数。于是,我们根据这个类,以及前面接口实现类定义的方法,可以快速的定义相关的随机函数。例如:

public class RandomFunction implements functionInterface {
    @Override
    public String execute(String[] args) {
        int len = args.length;
        int length = 6;// 默认为6
        boolean flag = false;// 默认为false
        if (len > 0) {// 第一个参数字符串长度
            length = Integer.valueOf(args[0]);
        }
        if (len > 1) {// 第二个参数是否纯字符串
            flag = Boolean.valueOf(args[1]);
        }
        return RandomUtil.getRandom(length, flag);
    }

    @Override
    public String getReferenceKey() {
        return "random";
    }

}

  在这里,我们定义了该random函数。使用方法如下:

  • __random(param1,param2):随机生成一个定长的字符串(不含中文)。param1:长度(非必填,默认为6),param2:纯数字标识(非必填,默认为false)。

接下来,我们再继续第二个随机函数:

public class RandomStrArrFucntion implements functionInterface{

    @Override
    public String execute(String[] args) {
        // 第一个参数为数组长度 即生成参数个数
        // 第二个参数为参数长度
        // 第三个参数为是否只有数字标志
        int len = args.length;
        int arrLength = 1; // 默认数组长度为1
        int length = 6;// 默认参数长度为6
        boolean flag = false;// 默认为false
        if (len == 1) {
            arrLength = Integer.valueOf(args[0]);
        } else if (len == 2) {
            arrLength = Integer.valueOf(args[0]);
            length = Integer.valueOf(args[1]);
        } else if (len == 3) {
            arrLength = Integer.valueOf(args[0]);
            length = Integer.valueOf(args[1]);
            flag = Boolean.valueOf(args[1]);
        }
        return RandomUtil.getRandomArr(arrLength, length, flag);
    }
    @Override
    public String getReferenceKey() {
        // TODO Auto-generated method stub
        return "randomStrArr";
    }
}

  在这里我们定义了随机生成字符串数组的的函数randomStrArr,使用形式如下:

  • __randomStrArr(param1,param2,param3):随机生成一个定长字符串数组。param1:数组长度(非必填,默认为1),param2:单个字符串长度(非必填,默认6),param3:纯数字标识(非必填,默认为false)。

接下来,我们再看第三个随机函数:

public class RandomTextFunction implements functionInterface{

    @Override
    public String execute(String[] args) {
        int length = 6;// 默认为6
        if (StringUtil.isNotEmpty(args[0])) {
            length = Integer.valueOf(args[0]);// 参数是长度
        }
        return RandomUtil.getRandomText(length);
    }

    @Override
    public String getReferenceKey() {
        // TODO Auto-generated method stub
        return "randomText";
    }

}

  在这里我们定义了第三个随机函数randomText,使用方式如下:

  • __randomText(param1): 随机生成一个定长的字符串(含中文)。param1:长度(非必填,默认为6)

  可以看到,我们再定义以上三个随机函数实现类的时候,都调用了RandomUtil里定义的方法。因此,如果我们在RandomUtil中定义了相关的方法后,用来生成随机函数,是非常快速和方便的。

原文地址:https://www.cnblogs.com/generalli2019/p/12237862.html

时间: 2024-11-07 18:06:49

基于Java+HttpClient+TestNG的接口自动化测试框架(六)-------随机函数的处理的相关文章

基于Java+HttpClient+TestNG的接口自动化测试框架(五)------ 测试用函数接口类及实现类

在前一篇中,我们着重阐述了参数的处理方法. 但是,这些参数基本都是直接赋值的.而实际的接口测试中,我们会根据需要做成很多的测试数据,这些测试数据会根据不同的情况来使用.例如,我可能需要一个能够随机生成一个中文的字符串,或者需要一个能够迅速求出一个文件或者字符串的MD5的值.在这种情况下,就需要我们动手去写一些函数来进行调用. 不过,如果是在Excel(或者其他文本编辑器)中写测试用例,如何才能让程序能够知道我是在调用一个函数,并且能够把这个函数的返回值赋给变量,正确的传入我想要的地方呢?下面,我

基于Java+HttpClient+TestNG的接口自动化测试框架(八)------ 针对文件的处理

在实际的接口测试中,有时需要根据情况进行文件的上传和下载.在文件数量比较小的时候,我们当然可以直接处理(比如若干个接口都用一个文件).但是,如果我们上传的文件需要使用不同文件夹里不同的文件,而且数量又比较大的情况下,直接写路径就比较麻烦了. 那么,怎样来处理这样的问题呢?还是需要先整理一下思路. 首先,我们需要根据某些特征,找到这些文件.例如,我们可以在指定的文件夹下面,按照文件后缀名来找寻文件.通常,我们在DOS下查询该文件夹下寻找同一后缀名文件的时候,会使用通配符“*”来代替文件名,例如:*

基于Java+HttpClient+TestNG的接口自动化测试框架(四)-------参数存取处理

在真正开始接口测试之前,我们需要对参数的处理进行梳理.这里所说的“参数”,既包含之前在xml中的配置(我们称之为全局参数),也包含在每一条用例中书写的param.全局参数为固定不变的,而根据接口相应获取的数据是动态变化的. 之前我们已经用${param_name}的形式,定义了如何从公共参数池中调用所需要的参数. 并且当一个接口的请求发送完成,进行下一个接口操作的时候,我们也需要对相应的数据进行处理.例如,前面一个接口的响应中出现了下一个接口需要使用的数据,比如id,password,token

手把手教你用Eclipse+TestNG搭建接口自动化测试框架

转载于:http://qa.blog.163.com/blog/static/190147002201510275306185/ 把群博里关于接口自动化的文章都看了一遍,都是关于测试过程中遇到的问题及解决方法,还没有框架搭建的博文.对于未做过接口自动化和java菜鸟的我,搭建好框架才是迈出的第一步.记录下搭建的过程,希望能够对想做接口自动化的同志们有一定的帮助.有些步骤较粗,若有问题,欢迎联系我. 一.环境安装 1.前提 安装好jdk 配置好Java环境变量 安装Eclips 这些网上都有,就不

Eclipse+TestNG搭建接口自动化测试框架

一.环境安装 1.前提 安装好jdk 配置好Java环境变量 安装Eclips 这些网上都有,就不再详细介绍. 资源分享链接:http://pan.baidu.com/s/1v9Fw6 2.安装TestNG插件 在线安装由于网速原因,速度较慢.下面是离线安装方式. (1)解压eclipse-testng离线包.zip (2)将[eclipse-testng离线包/feature]中的文件夹org.testng.eclipse_6.8.6.20130607_0745复制到[MyEclipse安装目

Python 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

目录 1.      写在前面 2.      开发环境 3.      大致流程 4.      框架简介 5.      运行结果展示 6.      文件与配置 7.      测试接口实例 n      1.登陆接口 n      2.支付密码更改接口 8.      数据库设计 9.      测试用例.测试数据准备 10.        模块与类.函数设计 11.        代码实现 a)         class congfighttp.ConfigHttp b)      

接口自动化测试框架 -- reudom

reudom Automated testing framework based on requests and unittest interface. 基于 Unittest 和 Requests 的 接口自动化测试框架 介绍 基于Unittest/Requests的接口自动化测试库 提供脚手架,快速生成接口自动化测试项目. 自动生成HTML测试报告. 支持用例参数化. 支持用例失败重跑 对原生Requests库API无损 目录架构 myreudom/ ├── test_case/ │ ├──

基于Python接口自动化测试框架(初级篇)附源码

引言 很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化测试平台,那为啥还要开发接口自动化测试框架呢?相同之处就不说了,先说一下工具的局限性: 1.测试数据不可控:    接口虽然是对业务逻辑.程序代码的测试,而实际上是对数据的测试,调用接口输入一批数据,通过断言代码验证接口返回的数据,整个过程围绕数据测试.    如果返回的数据不是固定的,是变化的,那么断言失败,就无法知道是接口程序错误引起的,还是数据变化引起的,所以就需要进行测

构建接口自动化测试框架

背景 由于项目需要实现接口自动化,于是我自己用Java + testNG 实现了一套接口自动化测试框架.基本功能实现了测试数据的读取,接口的请求,返回值的处理以及最后的断言. 先来看一下框架的目录结构: 框架比较简单,在设置好测试数据之后,就可以开始写用例了,如: 是不是很方便,用例写好之后,就可以部署Jenkins自动执行了. 下面来具体看一下框架的实现 测试数据的存储和读取 测试数据存在在TestData下的xml文件,每条用例一个文件,然后通过XML类去读取文件内容,并将内容转换成json