失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > jenkins部署成功执行自动化测试代码失败问题解决

jenkins部署成功执行自动化测试代码失败问题解决

时间:2023-07-09 22:02:14

相关推荐

jenkins部署成功执行自动化测试代码失败问题解决

一.问题描述

我的jenkins运行在虚拟机上,mysql服务在主机上;

1.先执行jenkins的deploy任务,拉取远程开发代码并进行部署

2.deploy任务部署完成触发部署test任务,运行自动化代码进行测试

问题出在test任务构建显示success,但是测试代码并没有执行成功

二.问题解决-数据库权限

按照报错提示去target目录下看运行结果报告

org.apache.ibatis.exceptions.PersistenceException: )### Error querying database. Cause: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES### The error may exist in mapper/SQLMapper.xml### The error may involve com.course.model.loginCase### The error occurred while executing a query### Cause: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)at com.course.cases.LoginTest.loginTrue(LoginTest.java:51)

显示无法访问到mysql数据库,检查了一下我的用户名密码写的是对的,解决如下:

1.尝试在cmd命令行把root用户的访问权限由localhost->所有主机

mysql -u root -pCREATE USER 'root'@'%' IDENTIFIED BY '密码'; grant all privileges on *.* to 'root'@'%' flush privileges;exit

再次登录即可。

2.并且在配置文件里把连接mysql的url由127.0.0.1改成本机IP,

3.提交代码到github

git add .git statusgit commit -m "修改数据库连接地址"git push

4.再次在jenkins上执行deploy任务,这次test任务还是没有执行成功

5.查看surefire报告报错

6.到jenkins运行工作目录

/root/.jenkins/workspace/deploy/Chapter13/target/logs

[root@fanyu logs]# ll总用量 16-rw-r--r--. 1 root root0 6月 13 12:17 event.log-rw-r--r--. 1 root root 13666 6月 13 12:18 userManger.log

查看一下本次deploy服务端程序启动信息

server logs:Caused by: org.apache.catalina.LifecycleException: Protocol handler start failedat org.apache.catalina.connector.Connector.startInternal(Connector.java:1021)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)... 21 common frames omittedCaused by: .BindException: 地址已在使用at sun..bind0(Native Method)at sun..bind(Net.java:433)at sun..bind(Net.java:425)at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)at org.apache..NioEndpoint.bind(NioEndpoint.java:210)at org.apache..AbstractEndpoint.start(AbstractEndpoint.java:1150)at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:591)at org.apache.catalina.connector.Connector.startInternal(Connector.java:1018)... 22 common frames omitted-06-13 11:03:54.870 [main] INFO org.apache.catalina.core.StandardService - Stopping service [Tomcat]-06-13 11:03:54.884 [main] INFO o.s.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener - Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.-06-13 11:03:54.886 [main] ERROR org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter - ***************************APPLICATION FAILED TO START***************************

三.问题解决-端口占用

1.检查了一下,我的jenkins服务在用的是8080端口,

[root@fanyu logs]# ps -ef | grep 8080root 3201 3022 0 08:18 pts/1 00:01:31 java -jar jenkins.war -httpPort=8080root10086 3022 0 12:34 pts/1 00:00:00 grep --color=auto 8080

服务端程序在用的也是8080端口;

2.于是便修改端口为8081(并把8081端口加入到防火墙的开放端口中)

示例:

[root@fanyu ~]# firewall-cmd --list-ports 列出开放端口8080/tcp 3306/tcp 80/tcp 6379/tcp 8081/tcp[root@fanyu ~]# firewall-cmd --zone=public --add-port=8082/tcp --permanent增加开放端口success[root@fanyu ~]# firewall-cmd --reload重启防火墙success[root@fanyu ~]# firewall-cmd --list-ports8080/tcp 3306/tcp 80/tcp 6379/tcp 8081/tcp 8082/tcp

3.再次启动deploy任务,test任务

4.test任务依旧报错,查看报告:

loginFalseorg.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.cj.municationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. ### The error may exist in mapper/SQLMapper.xml ### The error may involve com.course.model.loginCase ### The error occurred while executing a query ### Cause: com.mysql.cj.municationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77) at com.course.cases.LoginTest.loginFalse(LoginTest.java:11more Caused by: .ConnectException: 连接超时 (Connection timed out) at .PlainSocketImpl.socketConnect(Native Method) at .AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at .AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at .AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at .SocksSocketImpl.connect(SocksSocketImpl.java:392) at .Socket.connect(Socket.java:589) at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:173) at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65) ... 60 more ... Removed 37 stack frames

大意是连接超时,没有得到服务器的响应包;

四.问题解决-连接超时

1.尝试在本机ping虚拟机

发现可以ping通

2.尝试在虚拟机ping主机

发现连接超时

3.在网上查了下资料是本机的防火墙原因,Windows10的防火墙没有打开ICMPv4-in规则

于是解决如下:

1)打开设置,搜索防火墙

2)点击高级设置

3)点此更改防火墙属性

4)确保更改过后是这样的效果

5)点击入站规则,启动这个规则

再次虚拟机ping主机,发现可以ping通了

[root@fanyu logs]# ping 192.168.159.1PING 192.168.159.1 (192.168.159.1) 56(84) bytes of data.64 bytes from 192.168.159.1: icmp_seq=1 ttl=128 time=0.257 ms64 bytes from 192.168.159.1: icmp_seq=2 ttl=128 time=0.284 ms64 bytes from 192.168.159.1: icmp_seq=3 ttl=128 time=0.271 ms64 bytes from 192.168.159.1: icmp_seq=4 ttl=128 time=0.282 ms64 bytes from 192.168.159.1: icmp_seq=5 ttl=128 time=0.311 ms64 bytes from 192.168.159.1: icmp_seq=6 ttl=128 time=0.255 ms64 bytes from 192.168.159.1: icmp_seq=7 ttl=128 time=0.293 ms64 bytes from 192.168.159.1: icmp_seq=8 ttl=128 time=0.210 ms64 bytes from 192.168.159.1: icmp_seq=9 ttl=128 time=0.243 ms64 bytes from 192.168.159.1: icmp_seq=10 ttl=128 time=0.236 ms64 bytes from 192.168.159.1: icmp_seq=11 ttl=128 time=0.254 ms64 bytes from 192.168.159.1: icmp_seq=12 ttl=128 time=0.178 ms64 bytes from 192.168.159.1: icmp_seq=13 ttl=128 time=0.320 ms64 bytes from 192.168.159.1: icmp_seq=14 ttl=128 time=0.249 ms64 bytes from 192.168.159.1: icmp_seq=15 ttl=128 time=0.246 ms64 bytes from 192.168.159.1: icmp_seq=16 ttl=128 time=0.273 ms64 bytes from 192.168.159.1: icmp_seq=17 ttl=128 time=0.247 ms64 bytes from 192.168.159.1: icmp_seq=18 ttl=128 time=0.337 ms64 bytes from 192.168.159.1: icmp_seq=19 ttl=128 time=0.239 ms64 bytes from 192.168.159.1: icmp_seq=20 ttl=128 time=0.259 ms64 bytes from 192.168.159.1: icmp_seq=21 ttl=128 time=0.254 ms64 bytes from 192.168.159.1: icmp_seq=22 ttl=128 time=0.202 ms^C--- 192.168.159.1 ping statistics ---22 packets transmitted, 22 received, 0% packet loss, time 21032msrtt min/avg/max/mdev = 0.178/0.259/0.337/0.036 ms

再次在jenkins启动任务,发现还是报错

loginFalsejava.lang.NullPointerException at com.course.cases.LoginTest.getResult(LoginTest.java:96) at com.course.cases.LoginTest.loginFalse(LoginTest.java:119) at com.sun.proxy.$Proxy0.invoke(Unknown Source) ... Removed 33 stack frames

检查这行代码,发现

是因为response为空,所以产生了空指针异常,也就是没有得到响应

五.问题解决-请求无响应

1.不通过jenkins在本机终端尝试运行测试代码

也是报错的,报错如下:

12:53:08.671 [main] DEBUG com.course.model.loginCase - ==> Preparing: select * from login_case where id=?12:53:08.671 [main] DEBUG com.course.model.loginCase - ==> Parameters: 1(Integer)12:53:08.671 [main] DEBUG com.course.model.loginCase - <==Total: 1LoginCase(id=1, userName=tt, password=123, expected=true)http://192.168.159.1:8081/v1/login12:53:08.671 [main] INFO com.course.cases.LoginTest - ********开始验证loginTrue api*********12:53:08.675 [main] DEBUG org.apache.http.client.protocol.RequestAddCookies - CookieSpec selected: default12:53:08.675 [main] DEBUG org.apache.http.client.protocol.RequestAuthCache - Auth cache not set in the context12:53:08.675 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection request: [route: {}->http://192.168.159.1:8081][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]

Caused by: .ConnectException: Connection refused: connectat .DualStackPlainSocketImpl.connect0(Native Method)at .DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)at .AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)at .AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)at .AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)at .PlainSocketImpl.connect(PlainSocketImpl.java:172)at .SocksSocketImpl.connect(SocksSocketImpl.java:392)at .Socket.connect(Socket.java:589)

可以看出测试代码访问数据库都是正常的,但是请求服务端连接被拒绝了。

2.jenkins运行deploy任务和test任务

test任务 console output每一个测试方法也都是提示连接超时

3.确保服务端程序确实是起着的之后,检查了下请求的IP

这个是本机的IP,

因为

服务端程序和测试程序都是运行在虚拟机,这时候请求的地址应该是虚拟机的IP地址;

于是更改访问地址

不要忘了提交代码到git上

git代码更新后

再次执行jenkins的deploy和test任务,

服务器日志能正常响应:

test任务output:

查看extentreport报告

(cd /root/.jenkins/workspace/test/Chapter12/test-output)

[root@fanyu Chapter12]# cd test-output/[root@fanyu test-output]# ll总用量 20-rw-r--r--. 1 root root 20477 6月 13 13:21 index.html

这表明test任务执行成功了

如果觉得《jenkins部署成功执行自动化测试代码失败问题解决》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。