spring与swagger冲突为什么会和junit冲突

标签:至少1个,最多5个
写的api多了以后或者接手别人的项目之后,对api的运维也会比较多,特别是在测试环境,种种因素会导致接口出现不符合预期,这个时候当产品啊、测试啊,都跑过来骚扰你的时候,你的第一个反应是自己执行一下,看是不是真的接口有问题,然后再具体分析。
通常是拼接好接口地址,构造好参数,然后请求api,看看返回结果。这类动作做多了之后通常比较烦人,特别是最后发现是接口ok的。
于是就想找个rest api的自动化测试工具,方便自己排查问题。
能够批量导入swagger
能够自己构造测试接口
能输出report
最好能够alert
jmeter——网上找了一圈,首先入眼的是jmeter,但是由于界面界面有点粗糙,学习成本有点高,故暂时没有考虑。
soupui——看起来是老牌的工具,不过由于免费版不支持导出report,也就放弃了
dredd——这个看起来不错,可以支持swagger的,不过自己粗略试一下,没执行成功,也就先放弃了
postman——这个以前就有装过,只是没发现深挖它的功能,现在一看,挺简单的,容易上手,也支持swagger,然后就是它了
postman相关知识
导入swagger
这个功能是我最看重的,左上角有个import的按钮,可以选择"Import From Link",输入接口的swagger api docs的地址,比如::8080/scm/v2/api-docs,然后导入就可以了。
设置collection
保存一个请求的时候,可以选择已有的collection,或者新建一个。collection可以对等为test suite。
对于要跑自动化测试的,必须要设置tests这里的脚本,不然即使run,也没有啥意义。最简单最常用的两行脚本如下:
tests["Status code is 200"] = responseCode.code === 200;
tests['Response time is less than 500ms'] = responseTime & 500;
一个是断言http的状态码,一个是断言响应时间。
设置环境变量
随便选择collection的一个http请求,然后点击右侧的设置按钮,Manage Environments,然后可以定义环境变量,可以定义dev、prod两套,分别设置对应的环境的api的host,这样就不用重复设置api请求了。在url中用{{varname}}来引用变量,假设varname就是你设置的一个变量名。
执行runner
左上角有个runner图标,点一下弹出COLLECTION RUNNER界面。在这里就要进行批量自动测试的地方,选择environment,然后跑一下。
newman命令行执行
导出配置在collection那里,export,选择Collection V2,导出为json。如果使用了environment,则需要导出该environment的json配置。
安装newman
sudo npm install -g newman
查看newman版本
newman -version
命令行执行
newman run demo.postman_collection.json --reporters cli,html --environment dev.postman_environment.json
--reporter-html-export result.html
命令行结果如下:
┌─────────────────────────┬──────────┬──────────┐
│ executed │
├─────────────────────────┼──────────┼──────────┤
iterations │
├─────────────────────────┼──────────┼──────────┤
requests │
├─────────────────────────┼──────────┼──────────┤
test-scripts │
├─────────────────────────┼──────────┼──────────┤
prerequest-scripts │
├─────────────────────────┼──────────┼──────────┤
assertions │
├─────────────────────────┴──────────┴──────────┤
│ total run duration: 28s
├───────────────────────────────────────────────┤
│ total data received: 312.29KB (approx)
├───────────────────────────────────────────────┤
│ average response time: 1245ms
└───────────────────────────────────────────────┘
AssertionFai…
Response time is less than 1000ms
at assertion:2 in test-script
inside "XXXX" of "app1"
AssertionFai…
Response time is less than 1000ms
at assertion:2 in test-script
inside "XXXX" of "app2"
AssertionFai…
Response time is less than 1000ms
at assertion:2 in test-script
inside "XXXX" of "app1"
AssertionFai…
Response time is less than 1000ms
at assertion:2 in test-script
inside "XXXX" of "app3"
AssertionFai…
Response time is less than 1000ms
at assertion:2 in test-script
inside "XXXX" of
AssertionFai…
Status code is 200
at assertion:1 in test-script
inside "XXXX" of "app1"
同时会生成result.html报告。
jenkins集成
构建选择Execute Windows batch command——输入上面的命令就可以了
Publish JUnit test result report——jenkins有个Publish JUnit test result report可以用来解析junit的xml测试报告。要用这个的话,命令行得输出junit的report
newman run demo.postman_collection.json --reporters cli,html,junit --environment dev.postman_environment.json
--reporter-html-export result.html --reporter-junit-export junit-result.xml
0 收藏&&|&&14
你可能感兴趣的文章
156 收藏,20.3k
14 收藏,2k
28 收藏,1.4k
本作品采用 署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
分享到微博?
技术专栏,帮你记录编程中的点滴,提升你对技术的理解收藏感兴趣的文章,丰富自己的知识库
明天提醒我
我要该,理由是:1、添加 Swagger 与 SpringMVC 的依赖
com.mangofactory
swagger-springmvc
说明:这篇笔记参考了下面的博客,感谢博主。第 1 步: 引入相关的依赖。
com.mangofactory
swagger-springmvc
访问:579261次
积分:7361
积分:7361
排名:第3120名
原创:285篇
转载:31篇
评论:102条
(72)(1)(1)(1)(4)(2)(20)(1)(30)(2)(13)(5)(2)(9)(8)(9)(4)(6)(4)(33)(26)(14)(2)(3)(53)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'hibernat使用junit测试类测试hibernate的各种方法说明及注意要点
hibernat使用junit测试类测试hibernate的各种方法说明及注意要点:以在实验室的电脑为例,新建一个Dynamic web项目,通过myeclipse智能功能来包装该项目,可以使其项目自动生成为一个Hibernate项目,使用的是test下的user1数据库。
先建立一个User.cfg.xml文件。配置文件内容如下
&-//Hibernate/Hibernate Configuration DTD 3.0//EN&
&https://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd&&
org.hibernate.dialect.MySQLDialect
jdbc:://localhost:3306/test
com.mysql.jdbc.Driver
然后建立一个User持久化类,实现getter和setter方法。
package com.
public class User{
public Integer getId() {
public void setId(Integer id) {
public String getUsername() {
public String toString() {
return &User [id=& + id + &, username=& + username + &, password=&
+ password + &]&;
public void setUsername(String username) {
this.username =
public User() {
// TODO Auto-generated constructor stub
public User( String username, String password) {
this.username =
this.password =
public String getPassword() {
public void setPassword(String password) {
this.password =
建立映射文件:
&https://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd&&
前提是建立一个数据库,id(Integer) ,username(String) ,password (password)
属性和持久化类的字段对应
建立一个Junit类,实现各种方法
package com.
import java.sql.C
import java.sql.SQLE
import org.hibernate.S
import org.hibernate.SessionF
import org.hibernate.T
import org.hibernate.cfg.C
import org.hibernate.jdbc.W
import org.hibernate.service.ServiceR
import org.hibernate.service.ServiceRegistryB
import org.junit.A
import org.junit.B
import org.junit.T
public class TestSession {
public void before(){
con=new Configuration().configure();
ServiceRegistry serivice=(ServiceRegistry) new ServiceRegistryBuilder().applySettings(con.getProperties()).buildServiceRegistry();
sessionfactory=con.buildSessionFactory(serivice);
session=sessionfactory.openSession();
ts=session.beginTransaction();
public void testSession(){
User u=(User) session.get(User.class, 3);
System.out.println(u);
/*System.out.println(u);
User u2=(User) session.get(User.class, 3);
System.out.println(u2);*/
u.setUsername(&河南郑州&);
public void after(){
/*Flush缓存:session按照缓存 中对象的属性变化来同步更新 数据库
* 默认情况下Session在以下时间点刷新:
* --显试调用Session 的flush()方法
* --当应用程序调用Transaction的commit()方法时,该方法先flush然后再向数据库提交事务。
* 当应用程序执行一些查询(HQL Criteria)操作时,如果缓存中持久化对象的属性已经发生变化,会先flush缓存。以保证查询结果能够反映持久化
* 对象的最新状态
* flush缓存的例外情况:如果对象使用native生成器生成oid那么当调用Session的save方法保存对象时,会立即执行向数据库插入该实体的insert语句
* commit()和flush()方法的区别:flush执行一系列sql语句,但不是提交事务,commit方法先调用fluseh方法。然后提交事务。一位置提交事务意味着对数据库操作永久保存下来
* refresh会强制发送select语句。以使session缓存对象的状态和数据库中的对象保持一致
* clear()清理缓存
ts.commit();
session.close();
sessionfactory.close();
public void testclear(){
User u=(User) session.get(User.class, 1);
System.out.println(u);
session.clear();
User u2=(User) session.get(User.class, 1);
/*再不使用clear方法的情况下只打印一次sql语句
* 如果使用了clear则会打印两次,因为将session中的缓存清除掉了
/*1.save()方法
* 1)使一个临时对象变为持久化对象
* 2)为对象分配一个id。不执行save。该对象为临时对象,没有id
* 3)在flush缓存时,会发送一条insert语句。
* 4)在save方法之前的id是无效的
* 5)持久化对象的id是不能修改的,因此在执行save方法之后不能操作该对象
* Session的save方法使一个临时对象变为一个持久化对象,Session的save方法完成以下操作。
* 1)把User对象加入到Session缓存中。使它进入到持久化状态。
* 2)选用映射文件指定的标识符生成器,为持久化对象分配一个唯一的id。
*在使用代理主键的情况下。setId()方法为User对象的设置OID是无效的。
public void testSave(){
User u=new User();
u.setUsername(&ccc&);
u.setPassword(&ccccc&);
u.setId(100);
System.out.println(u);
session.save(u);
System.out.println(u);
public void testPersist(){
/*也会执行insert操作
* 和save方法有什么区别嘛
* 在調用persist方法之前若有id了則不會執行insert方法,并且会抛出异常,
User u=new User();
u.setUsername(&DED&);
u.setPassword(&eee&);
u.setId(200);
session.persist(u);
public void testGet(){
User u=(User) session.get(User.class, 1);
// session.close();
System.out.println(u);
//System.out.println(u.getClass().getName()); com.test.User
/*hibernate中的get和load方法的区别
* 1.执行get方法:会立即加载对象,
* 而执行load方法若不适用对象,则不会立即执行查询操作。而返回一个代理对象
* get是立即检索,load是延迟检索。
* 2.如果在打印获取的对象之前调用了session.close()
* load可能会抛出懒加载异常。org.hibernate.LazyInitializationException:
* 因为代理对象之前已经关闭了session
* 3.若数据表中没有对应记录,且session也没有被关闭(session.close()),同时需要使用对象时:get返回null 而load则抛出异常。
* load若不适用任何属性,则没问题不抛出异常,若需要初始化了。则抛出异常。
public void testLoad(){
User u=(User) session.load(User.class, 10);
System.out.println(u.getClass().getName()); // com.test.User_$$_javassist_0
// session.close();
// System.out.println(u);
* 1.若更新一个持久化对象不需要显试的调用update方法。因为在调用transaction的commit方法时,会先执行sesion的flush方法
* 2.更新一个游离对象,需要显试调用update方法,可以把一个游离对象变为一个持久化对象
* 需要注意的是:
*无论要更新的游离对象和数据表的记录是否一致都会发送update语句
*如何能让update方法不再盲目出发update语句。
* 在.hbm.xml文件的class节点设置select-before-update=true
*但通常不需要设置该属性。
*3.若数据表中没有对应的记录,但还是调用了update方法,会抛出异常,
*4.当update方法关联一个游离对象时,如果session的缓存中已经存在相同的oid的持久化对象
*因为在Session缓存中不能有两个相同的oid对象。此时会抛出一场错误NonUniqueObjectException异常
public void testupdate(){
User u=(User)session.get(User.class, 1);
ts.commit();
session.close();
session=sessionfactory.openSession();
ts=session.beginTransaction();
// u.setPassword(&sun&);
User u1=(User) session.get(User.class,1);
session.update(u);
System.out.println(u);
/*Session的saveOrUpdate方法
* Session的saveOrUpdate()方法同时包含了save方法和update方法。
* 判定执行这个方法时候具体执行其中的哪个方法的标准
* 当一个对象为游离对象的时候,执行update方法。当一个对象是临时对象时候,执行save方法。
* 1)java对象的oid属性为null
* 2)映射文件中设置了unsave-value属性值,并且java对象的oid取值与这个unsave-value属性值匹配。
* 注意:1)若oid不为空,但数据表中还没有对应的记录,会抛出一个异常。
* 2)了解oid值等于id的unsave-value属性对象,也可以认为是一个游离对象
public void saveorupdate(){
User u=new User(&struts&,&hibernate&);//
u.setId(1);
session.saveOrUpdate(u);//如果没有u.setId()方法此时的u对象是临时对象(为空)/此时执行save方法,但是由于其设置其id为1.在数据库中存在,因此属于游离对象。
/*delete()方法
* delete:执行删除操作,只要oid和数据表中的一条记录对应,就会准备执行delete操作。若oid没有对应的操作,则抛出异常
可以通过设置hibernate配置的属性hibernate.use_identifier_rollback为true使其删除后把其oid设置为null
public void delete(){
// User u=new User();
// u.setId(1);
User u=(User) session.get(User.class, 3);
session.delete(u);
System.out.println(u);
/*evict:从session缓存中把制定的持久化对象移除
* 移除后,原先改变的内容将不会提交给数据库记录中
public void evice(){
User u=(User) session.get(User.class, 4);
User u1=(User) session.get(User.class, 5);
u.setUsername(&&);
u1.setUsername(&&);
session.evict(u1);
public void testdoWordk(){
session.doWork(new Work(){
public void execute(Connection arg0) throws SQLException {
// TODO Auto-generated method stub
//获取原生的connection对象
System.out.println(arg0);1350人阅读
Swagger Editor本地开发环境搭建
转自:http://blog.csdn.net/wangmeng951011/article/details/
&&&&&&&&实际上,Swagger-Editor是基于 NodeJs 开发的,那么,就一定是需要Node的开发环境的啦!安装最新版的Node。直接去到NodeJs中文网,毕竟翻墙的梯子不是每个人都有,而且就算你有,呵呵,拖一个东西下来也不容易啊。链接如下:&
&&&&&&&&下载最新版的开发环境即可,当然,这里的话你安装之后会顺便把npm安装上给你。npm是什么?这个暂时不操心,可以理解为maven一类的包管理工具。安装好后,测试下,*
node -v*,你会看到当前的版本!看到了的话,恭喜你!&
&&&&&&&&好了下面环境准备好了,让我们进入正式流程撒!
&&&&&&&&这个时候,我们需要从Github上clone最新的nodejs的包。指令如下:
git clone /swagger-api/swagger-editor.git1
&&&&&&&&接下来,只需要温柔的进入到Swagger-Editor的目录里面。你就会看到如下的一个目录。
&&&&&&&&好了,我们来简单的看一下这里面都有啥?&
dist里面毫无疑问放置的是一些静态的文件了,然后那个node_models放置的是你在package.json中定义的那些类库。我们只要看一下README.md就可以知道如何用了。下面,我们看看怎么去开始?&
&&&&&&&&首先,* npm install *去安装需要的modules,这将会把所有依赖的包安装上,当然,会有些许的warning,这里要记住,一定下载最新版的NodeJs啊。&
&&&&&&&&在很多别的教程里,会让我们在装上http-server,但是你仔细一点的话就会发现,在packge.json里面实际上是声明了http-server的啦。&
好了,现在就可以启动了!&
&&&&&&&&退回到上一级目录,然后http-server 目录,直接就可以看到下面的信息!
Starting up http-server, serving swagger-editor-master
Available on:
http://192.168.253.1:8080
http://172.18.33.1:8080
http://127.0.0.1:8080
Hit CTRL-C to stop the server123456
&&&&&&&&接下来,访问那个Url,就可以看到美好得画面了!
&&&&&&&&好了,接下来就可以尽情的使用了,实际上这个编辑器是有线上的版本的,但是苦于网速实在是好坑啊!本地有一个还是比较好的。啊哈哈哈
&&&&&&&&本文主要讲述了Swagger-Editor的本地安装,当然,阿福在这里实际上有句话要说,因为觉得不体系化的去写一下Swaager实在是有违天理。于是,后面的文章会按照我接下来放出的一张思维导图!
&&&&&&&&期待!也希望能带给大家收获!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:678333次
积分:9053
积分:9053
排名:第2159名
原创:178篇
转载:506篇
评论:99条
(21)(25)(20)(15)(5)(5)(85)(47)(10)(4)(5)(36)(4)(31)(16)(29)(56)(43)(42)(11)(5)(8)(9)(3)(3)(2)(4)(9)(1)(5)(8)(7)(7)(1)(9)(17)(14)(39)(23)(1)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
按照这个将 Swagger 集成到原来的 Spring MVC 项目, 已经能够显示API文档了,但是所有的API都重复出现一次,请问有谁知道原因吗?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你这个问题是json转换器 多配置了一个 要删掉 在spring配置文件里,详情可以等我把这篇教程 今天就写出来
&!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 --&
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"&
&property name="messageConverters"&
&ref bean="jsonConverter"/&
&/property&
&!-- 对json支持 --&
&bean id="jsonConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"&
&property name="supportedMediaTypes" value="application/charset=utf-8" /&
&property name="prettyPrint" value="true" /&
&property name="objectMapper"&
&bean class="com.fasterxml.jackson.databind.ObjectMapper"&
&property name="serializationInclusion"&
&value type="com.fasterxml.jackson.annotation.JsonInclude.Include"&NON_NULL&/value&
&/property&
&/property&
楼主可以打开chrome调试 发现返回的json重复了一遍 因为弄了多个序列化的插件 只用一个就可以了
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:

我要回帖

更多关于 swagger2 注解说明 的文章

 

随机推荐