我将第一次使用BDD(行为驱动设计),并试图习惯这种处理问题的不同方式.
您能否提供一些故事/场景,您可以使用BDD说一个简单的登录应用程序?
例如,根据我的阅读,似乎很好:
当用户输入无效的用户ID /密码时,则显示错误消息.
相反:
通过在数据库中搜索匹配的记录来验证ID和密码.
我有这个功能文件:
Scenario Outline: Example
Given I am a user
When I enter <x> as an amount
Then the result should be <result>
Examples:
| x | result |
| 3 | 3 |
| 1 | 1 |
Run Code Online (Sandbox Code Playgroud)
我的问题是,在运行之后,每个示例都标记为 variant #
有没有办法说明每个示例行实际测试的内容,以便在报告中我们更好地了解测试的内容,而不仅仅是:
Scenario: Example, Variant 0
Scenario: Example, Variant 1
Scenario: Example, Variant 2
Run Code Online (Sandbox Code Playgroud)
我正在努力帮助我们的测试人员获得更有意义的报告; 通常有一个原因是他们编写了多个示例,并且他们希望以某种方式显示该示例的原因.
我正在尝试创建一组新的测试来测试我正在处理的遗留网站.该站点在后端使用数据库.我打算使用SpecFlow和Selenium,但是我对处理清理数据的最佳方法感到有点困惑.
目前,我有一组数据库备份,其中包含一组样本数据,我会在每次测试运行之前将其恢复.然而,这很麻烦,因此我只想在发布之前对关键测试运行执行此操作,并使持续集成运行在两者之间的同一数据库上运行.
目前我有大量的测试,如下所示:
Secenario: Test Item Creation
Given I am logged in
When I create an item with a unique name
Then an item exists with the unique name
Run Code Online (Sandbox Code Playgroud)
when步骤使用GUID来确保名称是唯一的,然后步骤可以通过模块变量访问它以检查它是否存在.
就像我说的那样,我有很多类似的测试,我在同一个数据库上多次运行它们,所以测试系统充满了物品,这会减慢搜索速度等.
我的问题是处理这个问题的最佳方法是什么?我应该在测试中创建另一个步骤,再次删除该项目,如下所示:
Secenario: Test Item Creation
Given I am logged in
When I create an item with a unique name
Then an item exists with the unique name
Then delete the item with the unique name
Run Code Online (Sandbox Code Playgroud)
或者我的测试框架应该以某种方式处理这个问题?如果是这样,人们做什么?鉴于SpecFlow步骤的全局性,我认为如果具有父子关系的多个项目可能成为问题,则以正确的顺序获取拆除步骤.
我需要传递黄瓜场景中的字符串列表,如下所示
Scenario Outline: Verify some scenario
Given something
When user do something
Then user should have some "<data>"
Examples: Some example
|data|
|Test1, Test2, Test3, Test4|
Run Code Online (Sandbox Code Playgroud)
在步骤定义中,我使用List检索某些变量的值。但是,当数据变量的值之一包含逗号(例如Tes,t4)时,它将变得复杂,因为它将“ Tes”和“ t4”视为两个不同的值
Examples: Some example
|something|
|Test1, Test2, Test3, Tes,t4|
Run Code Online (Sandbox Code Playgroud)
所以我可以使用任何转义字符还是有其他方法来处理这种情况
在我的 robolectric 测试中,我写了一个
@Rule
public ActivityScenarioRule<AppCompatActivity> activityScenarioRule =
new ActivityScenarioRule<>(AppCompatActivity.class);
@Rule
public ActivityScenarioRule<FragmentUtilActivity> activityScenarioRule2 =
new ActivityScenarioRule<>(FragmentUtilActivity.class);
Run Code Online (Sandbox Code Playgroud)
和一个内部类:
private static class FragmentUtilActivity extends FragmentActivity {
public static int anchorId = 200;
private StandaloneAccountMenuDialogFragment<FakeAccount> dialogFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout view = new LinearLayout(this);
view.setId(anchorId);
setContentView(view);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行代码时,它失败了。
第一条规则有效而第二条规则无效的原因是什么?
Unable to resolve activity for Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.myComp..internal/.StandaloneAccountMenuDialogFragmentTest$FragmentUtilActivity } -- see https://github.com/robolectric/robolectric/pull/4736 for details
java.lang.RuntimeException:
at org.robolectric.android.fakes.RoboMonitoringInstrumentation.startActivitySyncInternal(RoboMonitoringInstrumentation.java:48)
at org.robolectric.android.internal.LocalActivityInvoker.startActivity(LocalActivityInvoker.java:34)
at androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:205)
at androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:182)
at androidx.test.ext.junit.rules.ActivityScenarioRule.lambda$new$0(ActivityScenarioRule.java:68)
at …Run Code Online (Sandbox Code Playgroud) 有没有人有任何教学关系数据库和SQL的好方案?我可以找到的所有示例都是微不足道的或具有不可能的域约束(如全名是唯一的).
我特别想找到一些标准化的好例子:不能立即适合3NF和BCNF的表格.目前我正在为每个级别使用不同的问题.
当然,我也喜欢设计糟糕的数据库的好例子,但是在掌握了基础知识之前,它会有点分散注意力.
谢谢,一些很好的例子.我已经将学生/班级标记为答案,因为我认为这是迄今为止最好的,但如果有人想要贡献更多,请做.
有没有办法AfterScenario在失败的情况下实现钩子来重新运行当前测试?
像这样的东西:
[AfterScenario("retry")]
public void Retry()
{
if (ScenarioContext.Current.TestError != null)
{
// ?
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我的项目中的测试结合在Ordered测试中并通过MsTest执行.
我们正在尝试为每个步骤截取屏幕截图.
一切正常.但我们无法将屏幕截图与创建它们的步骤相关联.
我们想要的是FeatureContext.FeatureInfo和ScenarioContext.ScenarioInfo.但是在个人的一级.这样我们就可以相应地标记屏幕截图.
正如标题所示,我希望在场景大纲之前运行某些配置/环境设置步骤.我知道有Background这样做的场景,但Behave将场景大纲分成多个场景,从而为场景大纲中的每个输入运行背景.
这不是我想要的.由于某些原因,我无法提供我正在使用的代码,但是我将编写一个示例功能文件.
Background: Power up module and connect
Given the module is powered up
And I have a valid USB connection
Scenario Outline: Example
When I read the arduino
Then I get some <'output'>
Example: Outputs
| 'output' |
| Hi |
| No |
| Yes |
Run Code Online (Sandbox Code Playgroud)
什么会发生在这种情况下是会舞动动力循环和检查每个输出USB接口Hi,No,Yes导致三个电源周期和三个连接检查
我想要的是使用一次电源循环并检查连接一次,然后运行所有三个测试.
我该怎么做呢?
我希望能够通过使用标题本身中的示例让我的场景大纲标题包含更多信息:
Scenario Outline: A <some> step is <result>
When a <some> step
Then I get <result>
Examples:
| some | result |
| passing | passed |
| failing | skipped |
Then my scenario titles end up very useful:
Scenario: A passing step is passed
Scenario: A failing step is skipped
Run Code Online (Sandbox Code Playgroud) scenarios ×10
specflow ×4
bdd ×3
cucumber ×2
android ×1
cucumber-jvm ×1
database ×1
gherkin ×1
hook ×1
naming ×1
python ×1
robolectric ×1
teardown ×1
test-data ×1
testing ×1
unit-testing ×1
user-stories ×1
variables ×1