Не знаю как у вас, а у меня бывают периоды, когда я не всегда успеваю подключить обратно все тесты, которые были заигнорены из-за багов.
Для того, чтобы у меня не висели в проекте просто так без причины задизейбленые тесты, я организовала следующий процесс:
- Автоматизирую кейс
- Тест падает
- Создаю багу в джире (в данном случае это важно, так как утилитка заточена под работу с джирой, но никто не мешает повторить такое для других багтрекеров)
- В теле аннотации
@Ignore
я пишуid
созданного бага - Проходят года, баг фиксится, но я забываю его включить в регресии
- Вижу, что набралось слишком много заигнореных тестов и запускаю утилиту:
public class GetTestsWhichCouldBeEnabled {
public static void main(String[] args) throws Exception {
Pattern MY_PATTERN = Pattern.compile(<jira id pattern>);
String packageName = <test sources package>;
Reflections reflections = new Reflections(packageName );
Set<String> issues = new HashSet<>();
Set<Class<?>> allClasses = reflections.getTypesAnnotatedWith(Ignore.class);
reflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage(packageName ))
.setScanners(new MethodAnnotationsScanner()));
Set<Method> allMethods = reflections.getMethodsAnnotatedWith(Ignore.class);
for (Class klass : allClasses) {
String value = ((Ignore) klass.getAnnotation(Ignore.class)).value();
Matcher m = MY_PATTERN.matcher(value);
while (m.find()) {
issues.add(m.group());
}
}
for (Method method : allMethods) {
String value = method.getAnnotation(Ignore.class).value();
Matcher m = MY_PATTERN.matcher(value);
while (m.find()) {
issues.add(m.group());
}
}
JiraConnector connector = new JiraConnector();
for (String issue : issues) {
Issue jIssue = connector.issue(issue);
String status = jIssue.getStatus().getName();
if (status.toLowerCase().equals("closed")) {
System.out.println(issue);
}
}
}
Подключение к JIRA, оно же JiraConnector
:
public class JiraConnector {
private IssueRestClient issueRestClient = null;
protected static final Logger logger = Logger.getLogger(JiraConnector.class);
public JiraConnector() {
Properties properties = new Properties();
try {
properties.load(new FileInputStream("src/test/resources/jira.properties"));
} catch (IOException e) {
logger.error("Can't load 'jira.properties'");
}
String url = System.getProperty("url", properties.getProperty("url"));
String login = System.getProperty("login", properties.getProperty("login"));
String pass = System.getProperty("pass", properties.getProperty("pass"));
final AuthenticationHandler handler = new BasicHttpAuthenticationHandler(login, pass);
JiraRestClient client = new JerseyJiraRestClient(URI.create(url), handler);
issueRestClient = client.getIssueClient();
}
public Issue issue(String id) {
return issueRestClient.getIssue(id, new NullProgressMonitor());
}
}
Если в JIRA
у нас есть проекты Project1
и Project2
, в которых id тасков и багов начинаются с PROJ1
и PROJ2
соответственно, то паттерн с вероятностью 99% будет иметь такой вид:
Pattern.compile("(PROJ1|PROJ2)([+-])(\\d+)")
необходимые dependency:
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-rest-java-client</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.9-RC1</version>
<exclusions>
<exclusion>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
</exclusion>
</exclusions>
</dependency>