关于接口测试, 我们之前介绍过很多方法了, 有postman, soapUI, Jmeter等, 他们各有优势和劣势, 今天和大家分享的是如何用java TestNG来实现接口测试.

开始测试之前需要如下准备工作:

1. IDE环境, Intellij 或者eclipse, 个人推荐使用Intellij.

2. JKD1.8 以上

3. Maven 环境 Maven环境配置

4. 被测接口(京东web版登录API)

首先来看下jd 登录接口,chrome浏览器打开www.jd.com, 使用chrome开发者工具, Windows用户按键盘F12, 将tab切换到Network, 使用密码登录方式, 登录成功后, 我们就可以获取到登录接口了,如果无法获取,使用charles第三方工具也是妥妥的.

看下我登录后开发者工具:

接着在ide中创建项目, 我们选择maven来创建项目

是不是非常的简单, 一步步都是next下去即可, Intellij就会帮你把maven项目创建好.

如果你的IDE里没有maven,也不用着急, 在菜单的Preference->plugs里可以添加所需插件

在创建好的项目中, 我们首先进入pom.xml文件, 这是maven的配置文件

4.0.0

com.api.test

test

1.0-SNAPSHOT

这边需要添加相应的项目管理依赖包, 如testng等, 适个人情况添加所需的依赖包.

UTF-8

execShell

org.testng

testng

7.0.0

org.apache.poi

poi

3.10-FINAL

org.jsoup

jsoup

1.9.1

org.apache.httpcomponents

httpclient

4.5.2

org.apache.httpcomponents

httpmime

4.5.2

com.jcraft

jsch

0.1.54

mysql

mysql-connector-java

5.1.38

commons-beanutils

commons-beanutils

1.6

commons-collections

commons-collections

3.1

commons-logging

commons-logging

1.1

net.sf.ezmorph

ezmorph

1.0.6

net.sf.json-lib

json-lib

2.4

如果需要maven来帮你build项目也是可以的, 方法也是非常简单

org.apache.maven.plugins

maven-compiler-plugin

8

8

org.apache.maven.plugins

maven-surefire-plugin

2.19.1

1

1

true

once

-Dfile.encoding=UTF-8

${groupsTest}

**/*Test.java

测试思路:

以下示例中参数都来自于chrome开发者工具中捕获的信息, 因为被测接口是post方法,且在接口中声明了提交方式:

Content-Type:application/x-www-form-urlencoded; charset=UTF-8

所以在接口测试过程中, form data里的信息都要作为参数添加.

完成以上内容就可以开始创建一个测试的java类, 在你的项目的/test/java下面创建 NewApiTest.java

importorg.apache.http.HttpEntity;importorg.apache.http.NameValuePair;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.util.EntityUtils;importorg.testng.annotations.Test;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;/** @auth:louiezhou

* @return: 测试数据

* @parame:

**/

public classNewApiTest {

CloseableHttpResponse response=null;

String entityStr= null;//登录url

String url ="https://passport.jd.com/uc/loginService?uuid=a25f6873-4dd9-4334-ad4c-b8e3f&ReturnUrl=https%3A%2F%2Fwww.jd.com%2F&r=0.8097302259069017&version=2015";

@Test(invocationCount= 1, threadPoolSize = 0)public void JdLoginTest() throwsIOException {//获取连接客户端工具

CloseableHttpClient httpClient=HttpClients.createDefault();//创建POST请求对象

HttpPost httpPost=newHttpPost(url);//httpPost.addHeader post请求 header

httpPost.addHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");

httpPost.addHeader("User-Agent:","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36");//List headerList= Lists.newArrayList();//headerList.add(new BasicHeader(HttpHeaders.CONTENT_TYPE,"application/x-www-form-urlencoded; charset=UTF-8"));//headerList.add(new BasicHeader(HttpHeaders.USER_AGENT,"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"));//参数封装对象

List params=new ArrayList();try{

params.add(new BasicNameValuePair("uuid","a25f6873-4dd9-4334-ad4c-e6f8992b8e3f"));

params.add(new BasicNameValuePair("eid","BHM2GM3F6FVMTA3YNGT4JRDJBHAWFK7MSHDPF3SU4FHFSOLMBUP77TDQE5EB43BZPDT5J6PAQ6CFI"));

params.add(new BasicNameValuePair("fp","f0aef80fec848c0a78c823bd234"));

params.add(new BasicNameValuePair("loginType","c"));

params.add(new BasicNameValuePair("loginname","zhangsan"));

params.add(new BasicNameValuePair("nloginpwd","Y2nHBYQrhMS1/YvBs+cW8rrvbW1CYlmX61xfoLx7tgSpbgxZ8+/HCgefeAXphJVmefDdN/3d3UQLnFiyl7GSkGjZQNU4pw+9+202NovcR6q9G/haGpNKp/5h+Xs+J7BrUfKXvkmdmKS0fIs7ly0K+OY/BHKcYg="));

params.add(new BasicNameValuePair("authcode","107fdb562e32406cab356c3ff97"));

params.add(new BasicNameValuePair("pubKey","MIGfMA0GCSqGSIb3DQEgQDC7kw8r6tq43pwApYvkJ5laljaN9BZb21TAIfT/vexbobzH7Q8SUdP5uDPXEBKzOjx2L28y7Xs1d9v3tdPfKI2LR7PAzWBmDMn8riHrDDNpUpJnlAGUqJG9ooPn8j7YNpcxCa1iybOlc2kEhmJn5uwoanQq+CA6agNkqly2H4j6wIDAQAB"));

params.add(new BasicNameValuePair("sa_token", "B68C442BEF615E156C81EFA53D580517BB9357FB9516A01E25761124AE9AF7B3CFA3C38D38484A734CB58C286401C2DEC2A5DFF3C9E856280AF80D4851C9B0239587771E8DC06B46454644D4908F4DC165CB70D86EAC7276BFBE489FFE2324EDDC5F71043BFB99B3D6E238B1AE9E67C3F297E0993B8497B1287640777CF4FFBA52FF032510AD19D7F371541C798742CB4378E5DD2119BADE9078310468AF8436A2B88593A92EEAF16FCFD55CD7F121B58D7A9A833D74068FACC5A6D6D8C3D1A850245F0742DEEC12BACF0FF9D5853FFDF1B37AC6A5E676DC635896AFD884D0BBB8A490E57234DF65A76AF189908F4AB80AEA36E56F6DD110EF7D36D119BB77F0B65774780348FFE859A68D2E0B3A3CDDAFD1BEFCD401530D536C8EF68B618969FC2FFD658FE0BA7BC2E7250F9CCDBB8F9AF360FC293F294A7279EA70043E860784C2E2CF11181C44561794A32AADDB2AC37B1294C08E7B63C85E6561F138195ECCF28EA0F08FB5A16DB7A20814DD914FC0C8A12BF29FFC4F73DD39361EBA1A849BB25B9F5957589347E205573754EA468D809CCCA698BFAB16373516DC8F5FEE8A24C2306850D601D6827C161F1A83057E0F93A97A0C034E"));

params.add(new BasicNameValuePair("seqSid","31251240"));

params.add(new BasicNameValuePair("useSlideAuthCode","1"));

params.add(new BasicNameValuePair("_t","_t"));//使用URL实体转换工具

UrlEncodedFormEntity entityParam = new UrlEncodedFormEntity(params, "UTF-8");

httpPost.setEntity(entityParam);//执行请求

response=httpClient.execute(httpPost);//获得响应的实体对象

HttpEntity entity=response.getEntity();//使用Apache提供的工具类进行转换成字符串

int code =response.getStatusLine().getStatusCode();

System.out.println("StatusCode: " +code);

Assert.assertEquals(200,code);

entityStr=EntityUtils.toString(entity,"UTF-8");

System.out.println("接口返回结果是:="+entityStr);

}catch(Exception e){

e.printStackTrace();

}finally{//释放资源

if(httpClient!=null) {

httpClient.close();

}if (response!=null){

response.close();

}

}

}

}

声明:

1.示例使用testng, 因此必须在方法上添加@Test符号,便于被识别到是测试代码块

2.使用了java的httpclient, 它是一个客户端的http通讯实现库.

HttpClient的目标是发送和接收HTTP 报文,不缓存内容, 重新格式化请求/重定向URI,或者其它和 HTTP 运输无关的功能。

3.使用了List 的实现类ArrayList来封装对象, ArrayList的优点是查询速度比较快.

右键java文件, 选择run 即可执行, 让我们来看下执行结果:

思考:

这样一个接口测试就实现了, 但作为一名严格要求自我的资深测试工程师来说, 这样的设计合理吗? 是否满足数据和测试业务分离, 断言是否充足, 代码是否可以重用, 怎么去管理N多个测试用例, 怎么降低代码耦合度, 怎么进行多线程测试, 测试报告如何展示,如何自动构建, 诸多问题等待解决.

请持续关注我, 和你分享更多精彩内容.

Story:

人要有一个奋斗目标,这样活起来才有精神,有奔头。整天无所事事、无聊至极的,就是因为没有目标。从小就要为自己的人生制定一个目标,然后不断地向它靠近,终有一天你会达到这个目标。如果从小就糊里糊涂,对自己的人生不负责任,没有目标没有方向,那这一生也难有作为。每个人出门,都会有自己的目的地,如果不知道自己要去哪里,漫无目的地闲逛,那速度就会很慢;但当你清楚你自己要去的地方,你的步履就会情不自禁地加快。如果你分辨不清自己所在的方位,你会茫然若失;一旦你弄清了自己要去的方向,你会精神抖擞。这就是目

java移动端接口测试_使用java如何进行接口测试相关推荐

  1. java多端登录_【Java】一个登录功能也能玩出这么多花样?sa-token带你轻松搞定多地登录、单地登录、同端互斥登录...

    需求场景 说起登录,你可能会不屑一顾,还有比这更简单的功能吗? 获取一下用户提交参数 username + password 和数据库中一比对,有记录返回[登录成功],无记录返回[用户名或密码错误] ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. java是什么格式_是java格式

    错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...

  4. java 开发人员工具_每个Java开发人员都应该知道的10个基本工具

    java 开发人员工具 大家好,我们已经到了2019年的第二个月,我相信你们所有人都已经制定了关于2019年学习以及如何实现这些目标的目标. 我一直在撰写一系列文章,为您提供一些知识,使您可以学习和改 ...

  5. java ee开发环境_设置Java EE 6开发环境

    java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...

  6. java语言 编译原理_【Java学习】深入分析Java的编译原理

    在<Java代码的编译与反编译>中,有过关于Java语言的编译和反编译的介绍.我们可以通过javac命令将Java程序的源代码编译成Java字节码,即我们常说的class文件.这是我们通常 ...

  7. Java并发编程实战_福州java编程实战培训班排名

    如何选择福州java培训中心? 在福州,如果想迅速掌握java开发,参加福州java培训班无疑是一种非常有效的方式.但是,市场上有这么多的java培训机构,我们在选择的时候难免会眼花缭乱.福州java ...

  8. 学java的就业方向_学习Java的就业前景怎么样

    相信很多人对Java都有一定的了解,无论学习什么专业,最重要的一个目的就是进行就业,那么在选择专业的时候,应该如何选择呢?Java是现在很多人优先选择的专业,那么Java的就业前景如何呢?下面小编就几 ...

  9. java程序设计模拟题_《Java程序设计》东师模拟题题目及答案

    <Java程序设计>东师模拟题题目及答案 2020-08-30 09:08:37 931 有学员问关于<Java程序设计>东师模拟题题目及答案的题目的参考答案和解析,具体如下: ...

  10. JAVA redis缓存过期_失效java服务器

    Java 并发/多线程教程--4并发模型 本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平 ...

最新文章

  1. php查找多个字符串替换,php 替换多个字符串
  2. 为你的AliOS Things应用增加自定义cli命令
  3. 在PyTorch中转换数据
  4. mvn 汇编_2020年简单的早安共勉句子短信汇编58条
  5. 实例化Model的三种方式
  6. 量子计算机组运算极限,拓扑量子计算
  7. vs2013_update5下载链接(请使用迅雷下载)
  8. visual studio 2008 提示 “函数xxx 已有主体”
  9. 微信公众平台消息接口开发(8)小黄鸡(小贱鸡)机器人
  10. WPF 简易手绘笔迹支持回放的方法
  11. ElasticSearch之搜索词提示Sug
  12. 云服务和传统服务器相比有哪些明显的优势
  13. 用Python制作自己的炫酷二维码
  14. 敦煌日历2023 | 千年流光,风雅不绝
  15. 【数学】第二型曲线积分
  16. 令人炸毛儿的MySQL隐式转换 - 无形之刃,最为致命
  17. 雷卯推荐TVS低漏流100uA,低电压3.3v,功率400W
  18. 项目管理中最常见的问题有哪些?
  19. 3.7V锂电池供电方案探讨
  20. 组网技术 | VTP协议实验

热门文章

  1. 如何写一个bat批处理自动上传文件到FTP
  2. Vue+mui实现图片的本地缓存
  3. css3动画过渡按钮
  4. python教程简书_Python快速教程
  5. javaee 中文帮助文档_大牛耗时三天整理的:微服务+Nginx+Kubernetes实战文档和面试题...
  6. H264/ACC数据使用librtmp推流到服务器
  7. 鸿蒙os2.0开发者beta版,鸿蒙 OS 2.0 开发者beta版针对Mate 40系列设备开放
  8. java 多线程 临界区_多线程编程的设计模式 临界区模式
  9. mysql数据库的备份和恢复的常用方法_MySQL数据库备份与恢复方法(转)
  10. jpa onetoone_拥抱开源从表设计到 JPA 实现