当前位置: 首页 > 知识库问答 >
问题:

是否有某种运行ID对单个“运行”中的所有功能都是相同的?

黎腾
2023-03-14

我们的测试在一些目录中存储关于每个已执行测试的大量信息。如果同一次运行的所有结果都存储在一个以日期/id命名的目录中,这将是切实可行的。这样可以很容易地查看历史记录并跟踪是什么。目前这是一个手动作业,每次运行后都必须重命名输出目录以保留记录。

我们可以很容易地在cucumber之外编写脚本以实现自动化,但是我想知道这是否可以通过cucumber框架实现。一种简单的方法(如果可能的话)是创建一个runId变量,并在同一次运行中的所有测试之间传递它。然而,据我所知,不可能在场景和功能之间传输对象/变量。依赖注入似乎只允许在步骤之间使用相同的对象。cucumber框架中是否还有其他地方可以启动runId变量并将其传递给所有测试?或者也许cucumber中已经有类似的东西,我可以从框架的某个地方获得?

例如,如果我有步骤定义:

public class StepSy {
    File runDirectory;
    DataObject data;

    @Before
    public void before() {
        runDirectory = new File(someObjectPassedDown.getRunId());
    }

    @Given("^Condition (.*)$")
    public void condition() {
        /*Some conditions*/
    }

    @When("^I do (.*)$")
    public void perform(String toDo) {
        /*Some action*/
    }

    @Then("^I expect (.*)$")
    public void expect(String expectedValue) {
        /*Some assertion*/
    }

    @After
    public void after(Scenario scenario) {
        data.writeTo(runDirectory, scenario.getName());
    }
}

还有一个特点:

Feature: Tests

  Scenario: Test01
    Given Condition A
    When I do B
    Then I expect C

  Scenario: Test02
    Given Condition D
    When I do E
    Then I expect F

我可以运行此功能两次,得到两个目录:

MyTestRuns
├── Run_17.05.2017_130156
│   ├── Test01
│   └── Test02
├── Run_16.05.2017_163402
│   ├── Test01
│   └── Test02

共有1个答案

万高畅
2023-03-14

如果我答对了您的问题,您希望每次跑步都有一个唯一的目录。在包含目录初始化状态的类中设置静态标志。它将确保在第一个场景运行时创建目录,而不再创建。并创建用于生成运行id的静态方法。。。

public class StepSy {
    static File runDirectory;
    private static boolean fileInitFlag = false;
    DataObject data;


    @Before
    public void before() {
        if(!fileInitFlag) {
             runDirectory = new File(FileIdGenerator.getRunId());
             fileInitFlag= true;
        }
    }



    @After
    public void after(Scenario scenario) {
        data.writeTo(runDirectory, scenario.getName());
    }
}
 类似资料:
  • 问题内容: 。 我有下表: 我需要用计算所有行。可能与聚合有关吗? 现在,我按如下操作: 问题答案: 如果您只需要对1的行数进行计数,则可以执行以下操作: 如果要计算 每 行的行数,则需要使用:

  • 问题内容: 在实践中我可以在多大程度上依赖对象及其唯一性?例如: 是否意味着反之亦然?那相反呢? 保存某个地方以后使用(例如,放入某个注册表而不是对象本身)有多安全? (作为针对Python规范的建议规范编写:是具有相同id()相同对象的对象,是is运算符,未绑定方法对象) 问题答案: 根据文档,只能保证an是唯一的 在特定对象的生命周期内,以及 在特定的解释器实例中 因此, 比较s是不安全的,除

  • 问题内容: 我想知道React组件的生命周期方法是在所有子方法完成之后还是在调用该组件的方法之后立即执行的。 由于reconciler递归地调用method来更新视图,因此我有一种预感,在重新渲染组件的所有子代之后,该预感就会执行,但是文档中没有足够的信息。什么时候确切叫? 问题答案: 该方法在组件的方法完成执行后调用。这意味着将在所有儿童方法均完成后调用该方法。您链接的文档中暗含了以下内容: 当

  • 我有IntelliJ 2017.1和TestNG和Cucumber。我可以从testng运行测试。xml。但是,当我在场景上用鼠标右键从IntelliJ中的Cucumber特性文件运行相同的程序并单击run时,testng中没有任何设置。xml很荣幸。无法指定testng。用于编辑配置中cucumber的xml。有解决办法吗?请帮忙!

  • 我正在Spotify API中为每个音轨寻找某种通用标识符。例如,如果我拿到迈克尔·杰克逊的曲目《颤栗者》,我会得到所有的曲目信息和Spotify自己的唯一标识符,但当你在杂货店结账和买香蕉时,我也会得到相当于4011的音乐。不管你去哪个商店,你总是打4011买香蕉。谢谢!

  • 所以,如果我们只想在Liferay startup上运行一些东西,我们可以使用其他一些答案中描述的技术,比如下面。然而,为了使用OS管理表达式来表达自己,它提供了“自动运行”功能。每次启动Liferay时,此代码都会运行。这对于portlet初始化和其他工作非常有用,每次启动Liferay时都需要执行这些操作。 但是,我想知道的是,Liferay中是否有“运行一次”功能?那么,有没有一种方法可以指