我想要一个简单的方法为我的JUnit测试分配一个优先级值,这样我就可以说'只运行优先级1测试','运行优先级1,2和3测试'等等.我知道我可以只包括一行就像Assume.assumeTrue("Test skipped for priority " + priority, priority <= 2);在每个测试(其中的开始priority是最高值优先测试,我想运行,并2为这个特殊的测试的优先级值),但是复制粘贴在每个测试的开始行似乎没有一个很好的解决方案.
我尝试使用一个简单的注释编写解决方案,该注释由我正在使用的JUnit规则检测:
public class Tests {
@Rule
public TestRules rules = new TestRules();
@Test
@Priority(2)
public void test1() {
// perform test
}
}
public class TestRules extends TestWatcher {
private int priority = 1; // this value is manually changed to set the priority of tests to run
@Override
protected void starting(Description desc) {
Priority testCasePriority = desc.getAnnotation(Priority.class);
Assume.assumeTrue("Test skipped for priotity " + …Run Code Online (Sandbox Code Playgroud) 据我所知,有两种使用 Selenium 打字的方法:
new Actions(webDriver).sendKeys("text to send").perform();
webElement.sendKeys("text to send");
Run Code Online (Sandbox Code Playgroud)
该Actions方法似乎是复制用户键入的最自然的方式,因为按键被发送到浏览器想要的任何地方(我相信正在幕后使用名为 sendKeysToActiveElement 的方法)。然而,许多教程指导测试人员使用该WebElement方法(这实际上是使用 SafariDriver 时的唯一选择),我认为因为它更简单。
该Actions方法实际上是更好地模拟用户交互,还是我应该WebElement为了方便而使用该方法?
我有一个脚本,我想选择在容器中运行。我观察到,如果我运行一个中间脚本,它可以被杀死Ctrl-C,但是如果我不这样做,它就不能。
这是一个例子
test1.sh::
#!/bin/bash
if [ "${1}" = true ]; then
while true; do echo "args: $@"; sleep 1; done
else
docker run --rm -it $(docker build -f basic-Dockerfile -q .) /test2.sh $@
fi
Run Code Online (Sandbox Code Playgroud)
test2.sh:
#!/bin/bash
/test1.sh true $@
Run Code Online (Sandbox Code Playgroud)
basic-Dockerfile:
FROM alpine:3.7
RUN apk add --no-cache bash
COPY test1.sh test2.sh /
ENTRYPOINT ["bash"]
Run Code Online (Sandbox Code Playgroud)
运行./test1.sh true foo bar会愉快地打印出true foo bar,并且运行./test1.sh foo bar会在容器中执行相同的操作。发送Ctrl-C将终止进程并按预期删除容器。但是,如果我尝试通过更改
为来消除对额外文件的需要:/test2.sh $@/test1.sh true $@ …