- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请求您花时间并解决我的类(class)设计中可能存在的缺陷。下面是一个解释和一个工作示例。感谢您的宝贵时间和关注。
关于:
Run1、Run2 等...
均派生自基础测试 BaseRun
。唯一的测试 session
。 独特的测试 session
并不是ExtentTest
的新实例当前ExtentReport
问题出在我当前的类(class)设计中:
BaseRun
不知道它生成的唯一测试 session 。 BaseRun
中的getSession()
我目前使用的解决方案是:
@Test
中,我手动将TestSession注入(inject)到ITestResult中。我必须这样做,以便在 @AfterMethod
中我能够正确执行正确测试 session 的报告。
These are the lines under
Run1.java
that do this injection...
ITestResult result = Reporter.getCurrentTestResult();
result.setAttribute("session", testSession);
问题是:
Run1.java
public class Run1 extends BaseRun {
@Test
void runner1(){
ExtentTest testSession = getSession("Testing Runner 1");
ITestResult result = Reporter.getCurrentTestResult();
result.setAttribute("session", testSession);
testSession.log(Status.INFO, "performing Runner1 Step1");
testSession.log(Status.INFO, "performing Runner1 Step2");
}
@Test
void runner2(){
ExtentTest testSession = getSession("Testing Runner 2");
ITestResult result = Reporter.getCurrentTestResult();
result.setAttribute("session", testSession);
testSession.log(Status.INFO, "performing Runner2 Step1");
testSession.log(Status.INFO, "performing Runner2 Step2");
assertTrue(false);
}
}
BaseRun.java
public class BaseRun {
Reports MyExtentReport;
@BeforeSuite void setup(){ MyExtentReport = new Reports(); }
@AfterSuite void teardown(){ MyExtentReport.save();}
public ExtentTest getSession(String testName){
return MyExtentReport.createTest(testName);
}
@AfterMethod
void doSomeReporting(ITestResult result){
ExtentTest extentTest = (ExtentTest) result.getAttribute("session");
if(result.getStatus() == ITestResult.SUCCESS){
extentTest.pass(MarkupHelper.createLabel(result.getMethod().getMethodName() + " passed.", ExtentColor.GREEN));
}
else if(result.getStatus() == ITestResult.SKIP){
extentTest.skip(MarkupHelper.createLabel(result.getMethod().getMethodName() + " skipped.", ExtentColor.YELLOW));
extentTest.fail(result.getThrowable());
}
else{
extentTest.fail(MarkupHelper.createLabel(result.getMethod().getMethodName() + " failed.", ExtentColor.RED));
extentTest.fail(result.getThrowable());
}
}
}
Reports.java
public class Reports {
public ExtentReports extentReports;
public Reports(){
File file = new File(System.getProperty("user.dir") + "\\test-output\\extent.html");
ExtentHtmlReporter reporter = new ExtentHtmlReporter(file);
reporter.setAppendExisting(false);
extentReports = new ExtentReports();
extentReports.attachReporter(reporter);
}
public ExtentTest createTest(String testName){
return extentReports.createTest(testName);
}
public void save(){
extentReports.flush();
}
}
最佳答案
您可以执行以下操作:
@BeforeMethod
带注释的方法,其中您内省(introspection)要执行的方法,检查注释[在 (1) 中创建],如果存在,则从中提取 session 标识符并将其作为属性注入(inject)要执行的 @Test
方法的ITestResult
对象。@AfterMethod
内您应该能够轻松提取该属性。使用这种方法,您不必污染您的 @Test
带注释的测试方法,包含提取 session id 并将其显式注入(inject)到 @Test
的所有逻辑方法的ITestResult
对象。
这是一个示例,展示了所有这些的实际效果。
您的注释可能如下所示
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Target(METHOD)
public @interface SessionId {
String id();
}
修改后的基类可能如下所示
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import java.lang.reflect.Method;
public class BaseRun {
private String getSession(Method method) {
SessionId id = method.getAnnotation(SessionId.class);
if (id == null) {
return "";
}
return id.id();
}
@BeforeMethod
public void beforeMethod(Method method, ITestResult result) {
String id = getSession(method);
result.setAttribute("session", id);
}
@AfterMethod
public void afterMethod(ITestResult result) {
System.out.println("Session Id = " + result.getAttribute("session"));
}
}
现在您修改后的测试类可能如下所示
import org.testng.annotations.Test;
public class Run1 extends BaseRun {
@Test
@SessionId(id = "Testing Runner 1")
public void testMethod() {
System.out.println("This is a test case");
}
}
希望有帮助。
注意:我故意跳过提及 ExtentReports
类,因为要包含这些类,我需要将范围报告相关的 jar 添加到我的类路径中。
关于java - 类重新设计 - 将对象传递给 ITestResult 而不使用 Reporter.getCurrentTestResult(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45180601/
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
.NET 框架:4.5.1 我在 Blend for visual studio 2015 中遇到一个奇怪的错误,我找不到它的来源。 如果我在 VS 中打开我的 WPF 解决方案,它会加载并运行良好。
我经常遇到这样的问题,与 Hierarchical RESTful URL design 非常相似 假设该服务仅提供用户上传文档。 POST, GET /accounts PUT, DELETE /a
在 Rails 应用程序中,我使用 devise 来管理我的用户,而我用来销毁 session 的链接不再有效。它正在工作,现在我添加了事件管理员,但没有。 我的链接是 :delete, :clas
我已经坚持了超过 24 小时,试图按照此处发布的其他解决方案进行操作,但我无法使其正常工作。我是 Rails 新手,需要帮助! 我想让我的/users/edit 页面正常工作,以便我可以简单地更改用户
Devise 在以下情况下不会使用户超时: 用户登录,关闭选项卡,然后在超时 + X 分钟内重新访问该 URL。用户仍处于登录状态。 如果选项卡已打开并且稍后刷新/单击,则超时可以正常工作。这意味着
我想使用这样的 slider 我希望该 slider 根据提供给它的值进行相应调整。到目前为止,我只能应用具有渐变效果的背景,但无法获得这种效果。请通过提供样式代码来帮助我。
您应该为每种方法创建一个请求/响应对象,还是应该为每个服务创建一个? 如果我在所有方法中使用它,我的服务请求对象中将只有 5 个不同的东西,因为我对几乎所有方法使用相同的输入。 响应对象将只有一个字典
我正在尝试在 REST 中对实体的附件进行建模。假设一个缺陷实体可以附加多个附件。每个附件都有描述和一些其他属性(上次修改时间、文件大小...)。附件本身是任何格式的文件(jpeg、doc ...)
我有以下表格: Blogs { BlogName } BlogPosts { BlogName, PostTitle } 博客文章同时建模一个实体和一个关系,根据 6nf(根据第三个宣言)这是无效的。
如果 A 类与 B、C 和 D 类中的每一个都有唯一的交互,那么交互的代码应该在 A 中还是在 B、C 和 D 中? 我正在编写一个小游戏,其中许多对象可以与其他对象进行独特的交互。例如,EMP点击
关于如何记住我与 Omniauth 一起工作似乎有些困惑。 根据这个wiki ,您需要在 OmniauthCallbacksController 中包含以下内容: remember_me(user)
设计问题: 使用 非线程安全 组件(集合,API,...)在/带有 多线程成分 ... 例子 : 组件 1 :多线程套接字服务器谁向消息处理程序发送消息... 组件 2 :非线程安全 消息处理程序 谁
我们目前正在设计一个 RESTful 应用程序。我们决定使用 XML 作为我们的基本表示。 我有以下关于在 XML 中设计/建模应用程序数据的问题。 在 XML 中进行数据建模的方法有哪些?从头开始然
我正在设计一个新的 XSD 来从业务合作伙伴那里获取积分信息。对于每笔交易,合作伙伴必须提供至少一种积分类型的积分值。我有以下几点:
设计支持多个版本的 API 的最佳方法是什么。我如何确保即使我的数据架构发生更改(微小更改),我的 api 的使用者也不会受到影响?任何引用架构、指南都非常有用。 最佳答案 Mark Nottingh
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
我想用 php 创建一个网站,其工作方式与 https://www.bitcoins.lc/ 相同。确实,就每个页面上具有相同布局但内容会随着您更改链接/页面而改变而言,我如何在 php 中使用lay
我有一个关于编写 Swing UI 的问题。如果我想制作一个带有某些选项的软件,例如在第一个框架上,我有三个按钮(新建、选项、退出)。 现在,如果用户单击新按钮,我想将框架中的整个内容更改为其他内容。
我正在尝试找出并学习将应用程序拥有的一堆Docker容器移至Kubernetes的模式和最佳实践。诸如Pod设计,服务,部署之类的东西。例如,我可以创建一个其中包含单个Web和应用程序容器的Pod,但
我是一名优秀的程序员,十分优秀!