小编Ego*_*gor的帖子

用Jacoco从Sonar的条件覆盖范围中排除groovy slf4j日志记录

我们将SonarQube 5.1与Jacoco maven插件0.7.4一起使用,并且所有slf4j日志记录语句(例如,log.debug('Something happened')表明仅覆盖2个分支中的1个)。我知道这是因为slf4j在内部执行if debug,这很好,但是我们不希望这会影响我们的数字。我们对测试slf4j并不感兴趣,我们宁愿不要针对不同的日志记录级别多次运行每个测试。

那么,我们如何告诉Sonar和/或Jacoco将这些线路排除在覆盖范围之外?它们都具有可配置的文件排除项,但是据我所知,这些排除项仅是用于从覆盖范围中排除自己的类(使用目标目录),而不是导入的库。groovy.util.logging.*'无论如何,我都尝试将其添加到排除列表中,但是它什么也没做。

logger.isDebugEnabled()杀死了我的代码覆盖范围。我打算在运行cobertura时将其排除在外,并且建议对于Cobertura,应使用'ignore'属性而不是'exclude'。我在设置或文档中没有看到类似Jacoco或Sonar的东西。

编辑:运行Jacoco覆盖后,附带的Eclipse示例图像(Sonar在其GUI中显示相同的内容)。这是我们其中一个类的实际代码。 Jacoco分支机构对slf4j日志记录的覆盖

编辑2:我们正在使用Slf4j批注。此处的文档:http : //docs.groovy-lang.org/next/html/gapi/groovy/util/logging/Slf4j.html

此本地转换使用LogBack日志记录为您的程序添加了日志记录功能。对名为log的未绑定变量的每个方法调用都将映射到对记录器的调用。为此,将在类中插入一个日志字段。如果该字段已经存在,则使用此转换将导致编译错误。方法名称将用于确定在记录器上调用的内容。

log.name(exp)

映射到

if (log.isNameLoggable() {
        log.name(exp)
     }
Run Code Online (Sandbox Code Playgroud)

这里name是信息,调试,警告,错误等的占位符。如果表达式exp是常量或仅是变量访问,则方法调用将不会转换。但这仍然会导致对注入的记录器的调用。

希望这可以澄清正在发生的事情。如果为避免未启用的日志级别构建昂贵的字符串,我们的日志语句将成为2个分支(据我所知,这是一种常见做法)。但这意味着要保证覆盖所有这些分支,我们必须针对每个日志记录级别重复运行每个测试。

groovy unit-testing code-coverage sonarqube jacoco-maven-plugin

7
推荐指数
1
解决办法
1026
查看次数

在运行时更改服务引用端点,有时使用错误的端点

我有一个WCF服务,该服务又具有对其他SOAP端点的服务引用.此端点在另一个地址具有相同的副本,具有相同的元数据但数据不同.当请求进入我的服务时,它指定我使用它的两个相同端点中的哪一个想要数据.所以,我有这样的事情:

 using (var client = new ServiceClient())
 {         
     client.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);                

     //do some work, pull some data, bake some muffins

 }
Run Code Online (Sandbox Code Playgroud)

当我有两个请求与不同的URL非常接近时,这有时不起作用.第二个请求最终会转到与第一个请求相同的端点.我知道一旦频道打开我就无法改变端点,但我认为客户端只会被使用一次然后处理掉.是否有一些优化在同一个代理被重用于多个请求的地方?对这样的问题有什么好处?

编辑:更多细节:

该片段是一个方法的一部分(让我们称之为foo()),它暴露给我的RESTful服务的消费者.它不是静态的.端点url是作为URI的一部分提供的本地字符串.

[OperationContract]
[WebInvoke(Method = "GET",
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "getStuff?url={url}")]
 string foo(string url);

public string foo(string url)
{
     using (var client = new ServiceClient())
     {         
         client.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);                

         //do some work, pull some data, bake some muffins
         return "SO rocks!";
     }
}
Run Code Online (Sandbox Code Playgroud)

我没有为并发控制设置任何明确的内容.我理解它背后的理论,但缺乏技术经验,所以任何手握都会非常感激.

也!有一个半有效的理由来更改端点地址,而不是在代理构造函数中指定它.但是,出于测试目的,我只是尝试在构造函数中指定并且它看起来工作正常(感谢JMeter!).通过一些工作,我可以重构真正的代码以便这样工作,但我仍然非常感谢解释.学习很重要.

c# wcf web-services

6
推荐指数
1
解决办法
2257
查看次数

JMeter,如何为Interleave控制器中的每个采样器循环一次

我正在使用JMeter来自动化一些测试,我有一个非常基本的设置,包括登录和注销部分,然后是一些单独的测试.我想要的是每个测试登录,做它的事情,并注销.现在,所有测试都在交错控制器中,登录/输出部件在外面.如果我有10个测试,我将ThreadGroup设置为循环10次,一切都按预期工作.

但是,我们有3个人编写应该进入交错控制器的各自的测试,并且测试的数量正在增长.通过手动计数确保ThreadGroup循环的数量与测试的数量相匹配变得有点麻烦,并且我正在寻找一种方法来告诉JMeter循环次数与Interleave控制器中的子项一样多.有什么建议?

我不介意尝试不同的结构,只要它做我想要的并且不强迫人们在每次测试中添加登录/输出部分.

提前致谢.

loops jmeter

5
推荐指数
1
解决办法
847
查看次数