• 基于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的值。  

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

     

  • 相关阅读:
    Struts2---配置文件讲解及简单登录示例
    Struts2---环境搭建及包介绍
    Struts2---概述
    Spring---bean的作用域
    Spring---bean的实例化
    Sql Server 2005 .bak备份文进行还原数据库
    Windows Server 2003 R2 With Sp2 序列号
    [Idea]安装avtiviti插件以及 插件中文乱码
    IDEA 跑spring项目找不到get,set的问题
    SpringBoot 集成Avtiviti步骤
  • 原文地址:https://www.cnblogs.com/generalli2019/p/12202513.html
Copyright © 2020-2023  润新知