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

  在前一篇中,我们着重阐述了参数的处理方法。

  但是,这些参数基本都是直接赋值的。而实际的接口测试中,我们会根据需要做成很多的测试数据,这些测试数据会根据不同的情况来使用。例如,我可能需要一个能够随机生成一个中文的字符串,或者需要一个能够迅速求出一个文件或者字符串的MD5的值。在这种情况下,就需要我们动手去写一些函数来进行调用。

  不过,如果是在Excel(或者其他文本编辑器)中写测试用例,如何才能让程序能够知道我是在调用一个函数,并且能够把这个函数的返回值赋给变量,正确的传入我想要的地方呢?下面,我们就来看看具体的实现方法。

首先,我们需要确定一下,如何才能让程序能够识别这是一个函数,而不是字符串。这里,有个难点。

  既然是函数,就会出现参数的问题,参数有可能是1个,也有可能是多个,也有可能是没有。因此,我们这里就是要处理这个不定的参数。(当然,具体函数的参数个数,我们是可以定义的)

  类似于之前使用${param_name}的形式,我们在使用函数的地方用类似于__funcName(args)的形式来让程序判定这是一个函数。

  我们先设计出一个函数的雏形,可以用接口类,用来指代我们想在发送接口时使用的函数。对于一个函数,我们这里需要的是两个部分,一个是函数的名字,一个是函数的具体执行。

请看下一面一段代码:

public interface functionInterface {
    String execute(String[] args);

    String getReferenceKey();
}

  这里个接口类有2个方法,执行返回一个字符串,一个获取该函数的名字。这里,可以理解为,String[] args来定义我们执行方法的参数,是个不定参数。

下面,我们根据这个接口类,来实现我们的第一个函数类(获取日期的date函数)

import java.text.SimpleDateFormat;
import java.util.Date;
import utils.stringUtil;

public class dateFunctions  implements functionInterface{
    //重写执行方法
    @Override
    public String execute(String[] args) {
        //如果不加参数,返回Unix时间戳(毫秒级时间),否则返回当前系统时间。
        if (args.length == 0 ||stringUtil.isEmpty(args[0])) {
            return String.format("%s", new Date().getTime());
        } else {
            //返回的当前时间。可以自定义格式,这里先写成"yyyy-MM-dd",也可以根据需要进行修改
            return getCurrentDate("yyyy-MM-dd");
        }
    }

    private String getCurrentDate(String pattern) {
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        String str = format.format(new Date());
        return str;
    }

    //定义该函数的名字为“date”
    @Override
    public String getReferenceKey() {
        // TODO Auto-generated method stub
        return "date";
    }
}

在这里,我们自定义了一个执行方法,一个名字。执行方法里面的内容也可以根据自己需要自行改动。在使用形式上如下:

  • __date(param1): 生成执行该函数时的格式化字符串。param1为转换的格式,默认为“yyyy-MM-dd”。当然,我们也可以指定其他的格式,比如“yyyy-MM-dd-HH-mm-ss”等等。总之,可以通过该函数的参数来获取的到想要的数据。

根据这样的思路,我们可以再写一些经常使用到的函数。

第二个函数(求文件的MD5的值)

 备注:需要在项目中导入apache-commons-codec这个jar包

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;

import org.apache.commons.codec.digest.DigestUtils;

public class md5Functions implements functionInterface{
    //重写执行方法
    @Override
    public String execute(String[] args) {
        try {
            String filePath = args[0];       //如果filepath的开头是http,那么就以链接方式来处理。
            if (filePath.startsWith("http")) {
                return DigestUtils.md5Hex(new URL(filePath).openStream());
            } else {
                return DigestUtils.md5Hex(new FileInputStream(new File(
                        filePath)));
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

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

这里我们就完成了一个叫做md5的函数,这个函数的执行中需要输入一个参数,就是文件的路径。当然,我们也可以稍微改变一下,把它写成是取字符串的md5值的函数,也非常简单。

String md5_value = DigestUtils.md5Hex(target_str);

核心就是这一句即可。

  使用形式还是和之前一样:

  • __MD5(param1): 这里的param1是路径的字符串,可以是http路径,也可以是文件的路径。

  这里,留一个小问题:修改代码,让这个函数既可以求文件及路径的md5值,也可以求字符串的md5的值。  

  根据上面的思路,我们还可以做一些最大最小值,求和求积等等常用的工具函数,方便在接口测试的时候进行调用。这里就不展开了,请感兴趣的小伙伴自行拓展。

 

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

时间: 2024-11-06 19:12:05

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

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

我们之前使用接口类及接口实现类的方式,来定义了我们使用的工具类. 而所有的工具类中,随机函数是比较难于处理的.因为随机的对象不明确,随机的个数不明确.我们可以使用定义随机类的方式,来简单而快速的处理我们的随机对象生成的需要. 首先,我们先定义一个randomUtil的类,在这个类中,我们可以将想生成的随机函数进行具体的定义.在此,我们举几个例子.比如,随机生成一个整数,随机生成一个定长(或不定长)的,带汉字(或不带汉字)的字符串,随机生成一个数组等等. 来看一下具体的RandomUtil类的代码

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

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

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

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

robot framework + python实现http接口自动化测试框架

https://www.jianshu.com/p/6d1e8cb90e7d 前言 下周即将展开一个http接口测试的需求,刚刚完成的java类接口测试工作中,由于之前犯懒,没有提前搭建好自动化回归测试框架,以至于后期rd每修改一个bug,经常导致之前没有问题的case又产生了bug,所以需要一遍遍回归case,过程一直手工去执行,苦不堪言.所以,对于即将开始的http接口测试需求,立马花了两天时间搭建了一个http接口自动化测试框架用于测试后期回归测试,实在是被大量的重复手工执行搞怕了. 基础

接口自动化测试框架搭建 – Java+TestNG 测试Restful service

接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, 数据分离,Java+Maven+TestNG 本文主要介绍如何用Java针对Restful web service 做接口自动化测试(数据驱动),相比UI自动化,接口自动化稳定性可靠性高,实施难易程度低,做自动化性价比高.所用到的工具或类库有 TestNG, Apache POI, Jayway r

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

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

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

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

构建接口自动化测试框架

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

自己写的基于java Annotation(注解)的数据校验框架

JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方便和重用,自己写了一个简单的基于Annotation的校验框架.有兴趣的可以扩展. 框架说明: AnnotationValidable接口:所有需要使用该校验框架的类都要实现它,该类中没有任何方法需要实现,仅仅是一个表明那些类需要使用该校验框架的标识. GetFiledValue类:是一个工具类,对