首页 > 编程语言 >Java+SpringBoot+Maven+TestNG+httpclient+Allure+Jenkins实现接口自动化

Java+SpringBoot+Maven+TestNG+httpclient+Allure+Jenkins实现接口自动化

时间:2023-12-29 18:35:19浏览次数:58  
标签:Java SpringBoot param TestNG json new put import post

一、方案

需求目标:测试左移,测试介入研发过程,验证单接口正常及异常逻辑

选用工具:Java、SpringBoot、Maven、TestNG、httpclient、Allure、Jenkins

方案:创建测试接口测试工程,参照研发设计文档和设计思路,编写正常及异常用例,直接调用服务端接口,覆盖接口逻辑和验证异常处理,提升接口健壮性。

二、项目结构及代码说明

2.1 项目结构

2.2 代码示例

接口脚本举例说明:AddCustomerTest

点击查看代码
package cases.crc.customer;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import config.TestConfig;
import model.CrcCustomerCase;
import model.InterfaceName;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.apache.ibatis.session.SqlSession;
import org.json.simple.JSONObject;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import utils.ConfigFile;
import utils.DatabaseUtil;

import java.io.IOException;
import java.util.Random;

public class AddCustomerTest {
    @BeforeTest
    public void beforeTest(){
        TestConfig.defaultHttpClient = new DefaultHttpClient();
        TestConfig.crcCustomerCreateUrl = ConfigFile.getUrl(InterfaceName.ADDCUSTOMER);
    }

    @Test(groups = "addCustomerSuccess",description = "新增客户成功")
    public void addCustomerSuccess() throws IOException {
        // 使用HttpClient调用接口
        HttpPost post = new HttpPost(TestConfig.crcCustomerCreateUrl);
        //设置请求头信息 设置header,并且绕过token校验
        post.setHeader("content-type","application/json");
        post.setHeader("Authorization","Bearer test1");

        // 设置json参数
        JSONObject param = new JSONObject();
        String param1 = randomNumber();
        param.put("customerName",param1);
        param.put("contacts","hqq");
        param.put("mobile","13000001111");
        param.put("address","上海市闵行区");
        param.put("zipcode","310030");
        param.put("areacode",360425);
        param.put("status",0);
        param.put("bankAccount","123456");
        param.put("legalPerson","hqq");
        param.put("usci",param1);
        param.put("description","自动化接口测试客户");

        //将参数信息添加到方法中
        StringEntity entity = new StringEntity(param.toString(),"utf-8");
        post.setEntity(entity);

        //执行post方法
        HttpResponse response = TestConfig.defaultHttpClient.execute(post);

        //声明一个对象来进行响应结果的存储,获取响应结果
        String strResult = EntityUtils.toString(response.getEntity(),"utf-8");

        // 根据用户名数据库查询客户id
        SqlSession session = DatabaseUtil.getSqlSession();
        CrcCustomerCase o = session.selectOne("getCustomerInfoByCustomerName", param1);
        int customerId = o.getId();

        // 将json格式的字符串转换成json对象,便于断言
        ObjectMapper mapper = new ObjectMapper();
        try{
            JsonNode jsonNode = mapper.readTree(strResult);
            Assert.assertEquals(jsonNode.get("code").asInt(),0);
            Assert.assertEquals(jsonNode.get("data").asInt(),customerId);
        }catch (Exception e){
            System.out.println("json转换失败");
            e.printStackTrace();
        }
    }


    @Test(groups = "addCustomerFaile",description = "新增客户失败,客户名称存在")
    public void addCustomerFailed01() throws IOException{
        // 使用HttpClient调用接口
        HttpPost post = new HttpPost(TestConfig.crcCustomerCreateUrl);
        //设置请求头信息 设置header,并且绕过token校验
        post.setHeader("content-type","application/json");
        post.setHeader("Authorization","Bearer test1");

        // 设置json参数
        JSONObject param = new JSONObject();
        param.put("customerName","格力集团");
        param.put("status",0);

        //将参数信息添加到方法中
        StringEntity entity = new StringEntity(param.toString(),"utf-8");
        post.setEntity(entity);

        //执行post方法
        HttpResponse response = TestConfig.defaultHttpClient.execute(post);

        //声明一个对象来进行响应结果的存储,获取响应结果
        String strResult = EntityUtils.toString(response.getEntity(),"utf-8");

        // 将json格式的字符串转换成json对象,便于断言
        ObjectMapper mapper = new ObjectMapper();
        try{
            JsonNode jsonNode = mapper.readTree(strResult);
            Assert.assertEquals(jsonNode.get("code").asInt(),1001001012);
            Assert.assertEquals(jsonNode.get("msg").asText(),"客户名称已存在");
        }catch (Exception e){
            System.out.println("json转换失败");
            e.printStackTrace();
        }
    }

    public String randomNumber(){
        String res = "Auto-";
        Random random = new Random();
        for (int i = 0; i < 6; i++) {
            int randomInt = random.nextInt(10);
            res += randomInt;
        }
        System.out.println("生成的随机字符串:" + res);
        return res;
    }
}

三、项目集成和测试报告

3.1 准备工作

1)插件安装 allure

2)Jenkins:系统管理--》全局工具配置

3.2 jenkins新建自由风格的项目:esmc-test-autotest

1)源码:配置gitlab上的源码地址、用户名密码、分支等

2)maven命令:mvn clean test 清理target/目录下的文件,并执行src/test/下的测试用例

3)执行mvn test后,会生成allure-results文件夹存放生成的json报告

4)需要配置Allure,查看allure-results/的测试报告

3.3 构建项目

3.4、查看结果:点击Allure Report按钮

标签:Java,SpringBoot,param,TestNG,json,new,put,import,post
From: https://www.cnblogs.com/hqq2019-10/p/17935505.html

相关文章

  • 网络安全——SpringBoot配置文件明文加密
    信铁寒胜:这边文章真的说得挺好的。XTHS:第一步、XTHS:第二步、XTHS:第三步、XTHS:第四步!就可以实现了。(但是前提,你要先对你的文本进行加密,然后按照ENC(加密文本),放到配置文件中) 一、前言在日常开发中,项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码......
  • 无涯教程-Java 正则 - MatchResult int end(int group)函数
    java.time.MatchResult.end(intgroup)方法返回在此匹配期间给定组捕获的子序列的最后一个字符之后的偏移量。intend(intgroup)-声明intend(intgroup)group  - 该匹配器模式中捕获组的索引。intend(intgroup)-返回值最后一个字符匹配后的偏移量。intend(......
  • java基础语言期末复习
    一.类的封装1.类的封装是指将类的实现细节隐藏起来,仅向外部提供有限的接口进行访问。这样可以保护数据的安全性和完整性,同时也能够降低代码的耦合度。具体来说,类的封装可以通过以下方式实现:将类的成员变量设为私有属性,只能在类的内部访问。对于需要被外部访问的成员变量,可以......
  • Springboot集成Nacos
    1.添加依赖com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery2.2.9.RELEASEcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-config2.2.9.RELEASE2.注册中心1、把Nacos的Ip和端口配置配置文件中2、在启动类上加上@EnableDiscoveryClient注解3、同一类的服务可......
  • ECharts 是一个使用 JavaScript 实现的开源可视化库¹²³⁴。它可以流畅地运行在 PC
    ECharts是一个使用JavaScript实现的开源可视化库¹²³⁴。它可以流畅地运行在PC和移动设备上,兼容当前绝大部分浏览器(如IE8/9/10/11,Chrome,Firefox,Safari等)²³⁴。ECharts底层依赖轻量级的Canvas类库ZRender¹²³,提供直观,生动,可交互,可高度个性化定制的数据可视化图表¹......
  • Springboot集成Nacos
    1.添加依赖com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery2.2.9.RELEASEcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-config2.2.9.RELEASE2.注册中心1、把Nacos的Ip和端口配置配置文件中2、在启动类上加上@EnableDiscoveryClient注解3、同一类的服务可......
  • 在SpringBoot中自定义指标并使用Prometheus监控报警
    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享在10分钟教你使用Prometheus监控SpringBoot工程中介绍了如何使用Prometheus监控SpringBoot提供的默认指标,这篇介绍如何自定义业务指标,并使用Prometheus进行监控并报警,同时在Grafana进行展现示例......
  • 无涯教程-Java 正则 - MatchResult int end()函数
    java.time.MatchResult.end()方法返回匹配的最后一个字符后的偏移量。intend()-声明intend()intend()-返回值最后一个字符匹配后的偏移量。intend()-异常IllegalStateException-如果尚未尝试匹配,或者先前的匹配操作失败。intend()-示例下面的示例显示jav......
  • Spring Boot 正式弃用 Java 8。。
    大家好,我是R哥。关注Spring框架的都知道,因为Spring6.0要求最低JDK17+,所以SpringBoot3.0也必须JDK17+了,但是3.0出来的时候,一站式生成项目还是可以选Java8的,如下图所示:这是Spring提供的一站式生成Spring应用的网站,这个网站可以帮助开发人员一键生成符合S......
  • SpringBoot+modbus4j实现ModebusTCP通讯读取数据
    场景Windows上ModbusTCP模拟Master与Slave工具的使用:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/135290463ModebusTCPModbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP。Modbus协......