testng怎么运行运行报错 请问是为什么

testng运行报错 请问是为什么_百度知道
testng运行报错 请问是为什么
提问者采纳
如果你不能看到从窗口的轮廓 - 会显示在当选 如果项目在你的右边删除 大纲视图 - 导入(improt) - 现有项目到工作区(现有项目为Workspece) BR& - 然后找到要导入的OK。
其他类似问题
为您推荐:
12月19日的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁使用testng+selenium+maven运行是正常的 但一直会报下面哪个错 谁知道是为什么java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(Unknown Source) at java.net.SocketOutputStream.write(Unknown Source) at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source) at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source) at java.io.ObjectOutputStream.&init&(Unknown Source) at org.testng.remote.strprotocol.SerializedMessageSender.sendMessage(SerializedMessageSender.java:24) at org.testng.remote.strprotocol.MessageHub.sendMessage(MessageHub.java:44) at org.testng.remote.RemoteTestNG$RemoteSuiteListener.onFinish(RemoteTestNG.java:250) at org.testng.SuiteRunner.invokeListeners(SuiteRunner.java:200) at org.testng.SuiteRunner.run(SuiteRunner.java:243) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198) at org.testng.TestNG.runSuitesLocally(TestNG.java:1123) at org.testng.TestNG.run(TestNG.java:1031) at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
跟你出现一样的问题;初步怀疑是因为testng的运行模式;之前在本地使用TestNg的时候没有问题,然后用了jenkins以后就出现这种情况;正在尝试找方法;----------------------------------------------------------------------------------------------------------------------这个问题解决了,问题原因是maven使用的TestNG跟eclipse使用的TestNG不一致造成的----------------------------------------------------------------------------------------------------------------------你可以先尝试在pom.xml里面注释掉你添加的TestNG插件,执行一次;然后再将注释的解开就可以运行了
LZ,这个问题解决了吗??遇到了同样的问题。。。&br&&br&&br&-------------------------------------------------&br&我本地这个问题解决了&br&&img data-rawheight=&607& data-rawwidth=&634& src=&/49ce524db273c95d4cca7df13a91f637_b.jpg& class=&origin_image zh-lightbox-thumb& width=&634& data-original=&/49ce524db273c95d4cca7df13a91f637_r.jpg&&具体解决方案参考网址:&br&&a href=&///?target=http%3A///melody-emma/p/4806595.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&testng 工程报错java.net.SocketException&i class=&icon-external&&&/i&&/a&&br&&a class=& wrap external& href=&///?target=https%3A///cbeust/testng-eclipse/issues/91& target=&_blank& rel=&nofollow noreferrer&&SocketException: Software caused connection abort · Issue #91 · cbeust/testng-eclipse · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&希望能对大家有帮助~~~~
LZ,这个问题解决了吗??遇到了同样的问题。。。-------------------------------------------------我本地这个问题解决了具体解决方案参考网址:
已有帐号?
无法登录?
社交帐号登录
别把自己放错位置TestNG异常测试
TestNG异常测试
Windows10用户联盟QQ群:
跟踪异常处理代码提供了一个选项。可以测试是否需要代码抛出异常或不抛出。 @Test注释expectedExceptions 参数一起使用。现在,让我们来看看@Test(expectedExceptions)在动作中。
创建一个类
创建一个Java类进行测试说MessageUtil.java 在&C: & TestNG_WORKSPACE
在printMessage()方法里添加一个错误条件
* This class prints the given message on console.
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
// prints the message
public void printMessage(){
System.out.println(message);
int b = 1/a;
// add &Hi!& to the message
public String salutationMessage(){
message = &Hi!& + message;
System.out.println(message);
return message;
创建测试案例类
创建一个Java测试类为 ExpectedExceptionTest.java。
添加的ArithmeticException 和 testPrintMessage()测试用例的预期异常。
创建一个Java类文件名ExpectedExceptionTest.java 在&C: & TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.Test;
public class ExpectedExceptionTest {
String message = &Manisha&;
MessageUtil messageUtil = new MessageUtil(message);
@Test(expectedExceptions = ArithmeticException.class)
public void testPrintMessage() {
System.out.println(&Inside testPrintMessage()&);
messageUtil.printMessage();
public void testSalutationMessage() {
System.out.println(&Inside testSalutationMessage()&);
message = &Hi!& + &Manisha&;
Assert.assertEquals(message,messageUtil.salutationMessage());
创建测试运行
创建 testng.xml 在&C: & TestNG_WORKSPACE&执行测试案例。
&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE suite SYSTEM &http://testng.org/testng-1.0.dtd& &
name=&Suite1&
name=&test1&
name=&ExpectedExceptionTest&
编译MessageUtil 测试用例类使用javac
C:TestNG_WORKSPACE&javac MessageUtil.java TestJunit.java
现在,运行测试运行,这将运行提供的测试用例类中定义的测试用例。
C:TestNG_WORKSPACE&java -cp &C:TestNG_WORKSPACE& org.testng.TestNG testng.xml
验证输出。testPrintMessage()测试的情况下会获得通过。
Inside testPrintMessage()
Inside testSalutationMessage()
Hi!Manisha
===============================================
Total tests run: 2, Failures: 0, Skips: 0
===============================================
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&3794人阅读

使用Testng框架搭建自动测试框架,经常会需要增加失败自动截图,以及失败重跑功能,下面介绍一下不修改Testng的源码,通过监听器的方式来实现自动截图、重跑、以及自定义生成的Html结果文件功能。
自动截图功能
1、新建一个Java类继承TestListenerAdapter
2、重写onTestFailure、onTestSkipped等方法,在这些方法中加入截图操作
3、在testng.xml文件中配置自己编写的监听器类
class-name=&***.testng.TestngListener&
public class TestngListener extends TestListenerAdapter {
private static Logger logger = Logger.getLogger(TestngListener.class);
public static final String CONFIG = &config.properties&;
public void onTestFailure(ITestResult tr) {
super.onTestFailure(tr);
logger.info(tr.getName() + & Failure&);
takeScreenShot(tr);
public void onTestSkipped(ITestResult tr) {
super.onTestSkipped(tr);
logger.info(tr.getName() + & Skipped&);
takeScreenShot(tr);
public void onTestSuccess(ITestResult tr) {
super.onTestSuccess(tr);
logger.info(tr.getName() + & Success&);
public void onTestStart(ITestResult tr) {
super.onTestStart(tr);
logger.info(tr.getName() + & Start&);
public void onFinish(ITestContext testContext) {
super.onFinish(testContext);
* 自动截图,保存图片到本地以及html结果文件中
* @param tr
private void takeScreenShot(ITestResult tr) {
SimpleDateFormat formatter = new SimpleDateFormat(&yyyy_MM_dd_HH_mm_ss&);
String mDateTime = formatter.format(new Date());
String fileName = mDateTime + &_& + tr.getName();
String filePath = OrangeiOS.driver.getScreenshotAs(fileName);
Reporter.setCurrentTestResult(tr);
Reporter.log(filePath);
//这里实现把图片链接直接输出到结果文件中,通过邮件发送结果则可以直接显示图片
Reporter.log(&&img src=\&../& + filePath + &\&/&&);
失败自动重跑功能
1、新建Java类实现IRetryAnalyzer接口
public class TestngRetry implements IRetryAnalyzer {
private static Logger logger = Logger.getLogger(TestngRetry.class);
private int retryCount = 1;
private static int maxRetryCount;
private static ConfigReader config;
//外围文件配置最大运行次数
config = new ConfigReader(TestngListener.CONFIG);
maxRetryCount = config.getMaxRunCount();
logger.info(&maxRunCount=& + (maxRetryCount));
public boolean retry(ITestResult result) {
if (retryCount &= maxRetryCount) {
String message = &running retry for
'& + result.getName() + &' on class & +
this.getClass().getName() + & Retrying & + retryCount + & times&;
logger.info(message);
Reporter.setCurrentTestResult(result);
Reporter.log(&RunCount=& + (retryCount + 1));
retryCount++;
return true;
return false;
2、新建Java类实现IAnnotationTransformer接口
public class RetryListener implements IAnnotationTransformer {
public void transform(ITestAnnotation annotation, Class testClass,
Constructor testConstructor, Method testMethod) {
IRetryAnalyzer retry = annotation.getRetryAnalyzer();
if (retry == null) {
annotation.setRetryAnalyzer(TestngRetry.class);
3、在build.xml或者testng.xml文件中添加RetryListener监听器
上面三步就可以实现失败自动重跑了,是不是比较方便,不过添加了重跑功能后会发现测试结果的邮件中用例的个数增加了,比如我只有一个用例,失败重跑了2次,一共运行3次,测试结果中显示的用例个数会是3个,那接下来就需要解决这个问题了。
首先解决TestNg生成的index.html文件中个数不对的问题,这个问题只需要在Testng监听器的onFinish方法中,等所有用例运行完之后,检查用例,按照class+method+dataprodiver的名称生成hashcode获取唯一id,如果fail的用例中存在重复的则在 fail的用例中剔除掉,具体代码如下:
public void onFinish(ITestContext testContext) {
super.onFinish(testContext);
// List of test results which we will delete later
ArrayList&ITestResult& testsToBeRemoved = new ArrayList&ITestResult&();
// collect all id's from passed test
Set&Integer& passedTestIds = new HashSet&Integer&();
for (ITestResult passedTest : testContext.getPassedTests().getAllResults()) {
logger.info(&PassedTests = & + passedTest.getName());
passedTestIds.add(getId(passedTest));
Set&Integer& failedTestIds = new HashSet&Integer&();
for (ITestResult failedTest : testContext.getFailedTests().getAllResults()) {
logger.info(&failedTest = & + failedTest.getName());
// id = class + method + dataprovider
int failedTestId = getId(failedTest);
// if we saw this test as a failed test before we mark as to be deleted
// or delete this failed test if there is at least one passed version
if (failedTestIds.contains(failedTestId) || passedTestIds.contains(failedTestId)) {
testsToBeRemoved.add(failedTest);
failedTestIds.add(failedTestId);
// finally delete all tests that are marked
for (Iterator&ITestResult& iterator =
testContext.getFailedTests().getAllResults().iterator(); iterator.hasNext();) {
ITestResult testResult = iterator.next();
if (testsToBeRemoved.contains(testResult)) {
logger.info(&Remove repeat Fail Test: & + testResult.getName());
iterator.remove();
private int getId(ITestResult result) {
int id = result.getTestClass().getName().hashCode();
id = id + result.getMethod().getMethodName().hashCode();
id = id + (result.getParameters() != null ? Arrays.hashCode(result.getParameters()) : 0);
return id;
当前失败重跑也存在一些小问题:
1、setup中出现的错误直接是skip的,不会重跑
2、如果存在dataprodiver,则第二组数据以后的用例是不会重跑的
3、testng自带生成的emailable-report.html文件中用例的个数也不对了,这个问题可以自行修改文件
如何修改自定义emailable-report.html
emailable-report.html是Testng运行完成后自动生成的,经常运行结束后我们会把这个文件作为邮件正文发送给收件人,如果我们要修改这个文件内容怎么办呢?
1、首先emailable-report.html文件的生成TestNG是实现了IReporter接口,那我们可以直接从源代码中取出这个文件源代码
2、针对源代码进行自己修改
3、把修改后的源代码加入自己的工程
4、在build.xml文件中新增自定义的监听器,运行时就会调用自定义的监听器生成想要的html文件了
outputDir=&test-output& classpathref=&http://qa./blog/runpath& haltonfailure=&false& listeners=&com.****.CustomerEmailableReport&
dir=&.& includes=&${testngxml}.xml&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:108392次
积分:2045
积分:2045
排名:第13263名
原创:85篇
转载:44篇
译文:13篇
评论:13条
(1)(6)(2)(9)(4)(1)(7)(5)(3)(1)(1)(2)(2)(3)(6)(3)(1)(3)(1)(1)(1)(4)(3)(10)(1)(2)(11)(3)(12)(5)(3)(10)(2)(12)(1)二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
网易杭州 QA Team
务实 专注 分享 做有态度的QA
LOFTER精选
网易考拉推荐
TestNG监听器实现用例运行失败自动截图、重运行功能&&
20:54:22|&&分类:
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(4687)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'TestNG监听器实现用例运行失败自动截图、重运行功能',
blogAbstract:'使用Testng框架搭建自动测试框架,经常会需要增加失败自动截图,以及失败重跑功能,下面介绍一下不修改Testng的源码,通过监听器的方式来实现自动截图、重跑、以及自定义生成的Html结果文件功能。自动截图功能1、新建一个Java类继承TestListenerAdapter2、重写onTestFailure、onTestSkipped等方法,在这些方法中加入截图操作3、在testng.xml文件中配置自己编写的监听器类&listeners&
&listener class-name=\"***.testng.TestngListener\" /&',
blogTag:'testng',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:1,
publishTime:5,
permalink:'blog/static/',
commentCount:9,
mainCommentCount:5,
recommendCount:2,
bsrk:-100,
publisherId:,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'网易杭州 QA Team\r\n\r\n\r\n\r\n务实 专注 分享 做有态度的QA',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 testng运行 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信