apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 30
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.sampleapp.cucumber"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"
multiDexEnabled true
testApplicationId "com.sampleapp.cucumber.test"
testInstrumentationRunner "io.cucumber.android.runner.CucumberAndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
sourceSets {
androidTest {
assets.srcDirs = ['src/androidTest/assets']
}
}
testOptions {
execution 'ANDROIDX_TEST_ORCHESTRATOR'
}
}
dependencies {
implementation Kotlin.stdlib
implementation Kotlin.ktxCore
implementation AndroidSupport.appCompat
implementation AndroidSupport.constraintLayout
androidTestImplementation AndroidTest.rules
androidTestImplementation AndroidTest.ext
androidTestImplementation AndroidTest.runner
androidTestImplementation AndroidTest.cucumber
androidTestImplementation AndroidTest.espressoCore
androidTestImplementation AndroidTest.orchestrator
}
class AndroidTest {
public static rules = "androidx.test:rules:${Version.testCore}"
public static runner = "androidx.test:runner:${Version.testCore}"
public static ext = "androidx.test.ext:junit:${Version.testExt}"
public static espressoCore = "androidx.test.espresso:espresso-core:${Version.espresso}"
public static orchestrator = "androidx.test:orchestrator:${Version.orchestrator}"
public static cucumber = "io.cucumber:cucumber-android:${Version.cucumber}"
}
class Kotlin {
public static stdlib = "org.jetbrains.kotlin:kotlin-stdlib:${Version.kotlin}"
public static ktxCore = "androidx.core:core-ktx:${Version.ktx}"
}
class AndroidSupport {
public static appCompat = "androidx.appcompat:appcompat:${Version.appCompat}"
public static constraintLayout = "androidx.constraintlayout:constraintlayout:${Version.constraintLayout}"
}
class Version {
public static testCore = "1.3.0"
public static testExt= "1.1.2"
public static espresso = "3.3.0"
public static cucumber = "4.3.0"
public static orchestrator = "1.1.0"
public static appCompat = "1.1.0"
public static constraintLayout = "1.1.3"
public static kotlin = "1.4.0"
public static ktx = "1.3.0"
}
@Suppress("unused")
@CucumberOptions(
features = [
"features"
],
glue = ["com.sampleapp.cucumber.test"],
tags = ["@android", "~@manual"],
)
class CucumberOptionClass
Feature: Feature description
@ios @android
Scenario: Scenario description
Given Something is true
When Something happens
Then Something is true and something happens
步骤的定义:
class SomeTestImplementation {
private lateinit var context: Context
@Before
fun setUp() {
context = InstrumentationRegistry.getInstrumentation().targetContext
}
@Given("Something is true")
fun somethingIsTrue() {
}
@When("Something happens")
fun somethingHappens() {
}
@Then("Something is true and something happens")
fun somethingIsTrueAndSomethingHappens() {
assertTrue(false)
}
}
这是文件夹的结构
--main
--java
--app.package
MainActivity
--androidTest
--java
--app.package.test
--steps
--example
SomeTestImplementation
CucumberOptionClass
--assets
--features
Sample.features
当我运行./gradlew clean connectedcheck
时,我得到错误:
context = InstrumentationRegistry.getInstrumentation().targetContext
在步骤的定义中,我仍然从命令行得到相同的错误,但是当我在AS中运行它时,测试成功地运行了(它显示了最后一步的失败,但这是意料之中的)。
如果我用AndroidJunitRunner替换Runner,并添加一个non-cucumber测试,那么一切都正常:我也可以获取上下文。
如果从命令行执行以下步骤:
./gradlew assemble
./gradlew assembleAndroidTest
adb install ./app/build/outputs/apk/debug/app-debug.apk
adb install ./app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
adb shell pm list instrumentation | grep sampleapp
adb shell am instrument -w com.sampleapp.cucumber.test/io.cucumber.android.runner.CucumberAndroidJUnitRunner
instrumentation_result:shortmsg=进程崩溃。Instrumentation_Code:0
我还试图删除标记,以减少在CLI上运行时查找测试的问题
我设法让它起作用了,换了跑步者:
我定义了:
class SampleAppCucumberAndroidJUnitRunner : CucumberAndroidJUnitRunner()
然后我在构建中使用了它。gradle
:
testInstrumentationRunner "com.sampleapp.cucumber.test.SampleAppCucumberAndroidJUnitRunner"
我正在尝试使用IntelliJ Community edition和Gradle5.5.1运行一个Cucumber/Selenium项目。 我的TestRunner类如下:
如何使用Maven在以下位置运行cucumber测试。 源文件夹'src/main/java'和'src/main/resources'包括在每个源文件夹中创建的包'com.testing.testproject.login'中的步骤定义和功能文件。 这是我的POM文件: 提前道谢。
我目前有一个cucumber的考试数量,它们都在一个特定的标签下,以便这些特定的可以再次运行,一旦我对我的更改感到满意,它们就会被更改为更通用的,它们作为CI套件的一部分运行等。 我当前用于运行该组测试的命令是: 我可以在这个命令中添加什么,以使这些特定的测试在循环中运行?i、 e.我想在这个标签下运行这些特定的测试,比如20次(而不是每次都要等待完成并手动输入命令)。 我试着四处寻找一些例子,但
我正在使用cucumber测试和testng,我计划并行运行测试。我以前有使用testng框架和并行执行的经验,如果不使用mavensurfire插件(pom.xml),我如何实现相同的效果 我的配置, Cucumber JVM,TestNGCucumberRunner。用于触发特性文件的java文件
我目前正在尝试使用Cucumber实现并行测试运行。我设法使用万无一失的插件同时运行了两个不同的运行程序。现在我想检查是否可以并行运行SingleRunner文件多次。 我有一个签名测试。所以我需要在几个平台上并行运行。有可能吗? 这是我的跑步者档案 无跑道进近 工厂级 `导入org . open QA . selenium . web driver; ` 阶梯班 导入org.openqa.sel
有没有人能告诉我为什么我不能使用Maven运行任何测试。 已配置SureFire插件 在runner类下设置胶合代码 “测试”被追加到runner类 注意:如果我将文件作为Junit运行,那么它可以正确地运行所有场景。只有当我使用Maven运行它时,才不会运行任何测试。