出于日志记录的目的,我创建了一个方法logTitle(),它打印出TestNG测试的调用方法名称.示例代码如下.
@Test
public void test1() throws Exception {
method1();
}
public static void method1() throws Exception {
Utils.logTitle(2);
}
Run Code Online (Sandbox Code Playgroud)
...
public static void logTitle(Integer level) throws Exception {
// Gets calling method name
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
// This would get current method name
switch (level) {
case 1:
logger.info("=======================================================");
logger.info(method);
logger.info("=======================================================");
break;
case 2:
logger.info("------------------------------------");
logger.info(method);
logger.info("------------------------------------");
break;
case 3:
logger.info("---------------------");
logger.info(method);
logger.info("---------------------");
break;
case 4:
logger.info("--------- " + method + " ------------");
break;
default:
logger.info(method);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我在两台不同的机器上获得了不同的logTitle()结果. …
无论我在BUILD_LOG_EXCERPT中放置什么,我得到的只是一个空体的电子邮件,因此可以使用一些帮助.
我有一个写入控制台的java程序.Jenkins控制台输出的片段如下所示:
...
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building project1 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- exec-maven-plugin:1.4.0:java (default-cli) @ project1 ---
Parameters provided: SG, 100, 1000
query: select COUNT(*) from table1 where col1 = ? and col2 = ? and col3 = ?
Rows in table: 5776
Threshold: 100
Rows returned above threshold, skipping dpan generation batch file.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.125 s
[INFO] Finished at: 2016-02-08T09:31:37-08:00
[INFO] Final Memory: …Run Code Online (Sandbox Code Playgroud) 我们正在尝试使用 Jenkins 作为我们的 CI/CD 解决方案,并希望能够在我们的 TestNG 测试未达到设定的通过率阈值时使部署失败。
目前我们的 Jenkins 作业通过 maven 执行我们的 TestNG 测试,因此任何测试失败都将构建标记为失败。即任何低于 100% 的通过率,都会导致构建作业失败。
我们希望能够使其可配置 - 即如果通过率低于 98%,则测试作业失败。
这是我可以通过一些插件在 Jenkins 工作中控制或配置的东西,还是我必须在 TestNG 侦听器内部编码的东西,即onFinish()并根据计算出的通过率设置返回值?
使用设计器/类构建管道,您可以使用要传递到任务中的默认值定义管道变量。如何对基于 YAML 的管道执行相同的操作?
我想创建三个构建管道,每个管道都有一个设置为不同值的变量。所有三个都指向一个 YAML 文件。该文件指出:
您可以选择允许在排队时设置哪些变量以及由管道作者修复哪些变量。如果一个变量出现在 YAML 文件的变量块中,它是固定的,不能在排队时被覆盖。要允许在排队时设置变量,请确保它不会出现在管道或作业的变量块中。您可以在编辑器中设置一个默认值,该值可以被排队管道的人覆盖。
目前尚不清楚如何对 YAML 文件执行此操作。
我可以创建一个模板 YAML 文件,并为每个调用模板文件的配置值创建一个单独的 YAML 文件,但是我无法在运行时设置配置值。
在解密期间,我得到的是"错误的密钥大小"或"给定的最终块未正确填充",这取决于我正在运行的操作系统.
在Win7上,使用IBMJCE或SUNJCE(两者都是Java8),解密在25%的时间内失败:
javax.crypto.BadPaddingException:给com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:811)的com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676)中的最终块没有正确填充at com.sun.crypto.provider.DESedeCipher.engineDoFinal(DESedeCipher.java:294)at javax.crypto.Cipher.doFinal(Cipher.java:2087)
在mac上,使用SUNJCE,解密在100%的时间内失败:
java.security.InvalidKeyException:com.sun.crypto.provider.DESedeCrypt.init(DESedeCrypt.java:69)的密钥大小错误,位于com的com.sun.crypto.provider.CipherBlockChaining.init(CipherBlockChaining.java:91). sun.crypto.provider.CipherCore.init(CipherCore.java:469)at com.sun.crypto.provider.DESedeCipher.engineInit(DESedeCipher.java:197)at javax.crypto.Cipher.implInit(Cipher.java:791)在javax.crypto.Cipher.chooseProvider(Cipher.java:849)javax.crypto.Cipher.init(Cipher.java:1348)
使用DESEde,我相信密钥大小必须是24,我可以看到在Windows上,解密后,它总是24字节,而在mac上,它永远不会是24字节.
这是起点.在decryptWithSymmetricKey期间始终抛出异常.注意,我对大部分代码(特定于DESede)进行了短循环,无法进一步缩小代码(非常新的安全空间).
public static void runtest() throws Exception {
String symmPad = "DESede/CBC/PKCS5Padding";
String asymmPad = "RSA/ECB/OAEPWithSHA-256AndMGF1Padding";
String pubKeyFp = "somekey";
String stringToEncrypt = "abcdefg";
KeyGenerator kgen = KeyGenerator.getInstance(DESEDE);
kgen.init(112);
SecretKey secKey = kgen.generateKey();
String encryptedKey = encryptSymmetricKey(secKey, asymmPad);
String encryptedData = encryptDataWithSymmetricKey(stringToEncrypt, secKey, symmPad);
String decryptedKey = decryptWithPrivateKey(encryptedKey, pubKeyFp, asymmPad);
String decryptedData = decryptWithSymmetricKey(encryptedData, decryptedKey, symmPad);
}
Run Code Online (Sandbox Code Playgroud)
这里我们加密对称密钥,两个环境中的密钥长度为24
private static String encryptSymmetricKey(SecretKey secKey, String asymmPadding) …Run Code Online (Sandbox Code Playgroud) 当我并行运行测试类时,失败的测试数量比运行串行测试类时要高。为了调试目的,我在控制台上记录了很多内容,但在并行运行时几乎没有用,因为记录的所有内容都是混乱/无序的。
在我尝试修复日志记录问题以便更好地调试之前,我想知道,如果我设置了parallel="classes",它是否能保证线程安全?我假设如果我设置parallel="tests"两个方法可能会尝试访问范围内的同一对象,从而导致线程安全问题。
IE:
<suite name="test" parallel="classes" thread-count="3">
Run Code Online (Sandbox Code Playgroud) 我的解决方案有两个项目 - proj1 和 proj2,它们引用了 proj1。我刚刚将解决方案从packages.config 转换为PackageReference,现在当我构建解决方案时,proj2 无法编译并出现错误:
找不到 C:\Users...\source\repos\project\proj1\packages.config。确保此项目已安装 Microsoft.Bcl.Build 并且 packages.config 位于项目文件旁边
我查看了 .csproj 文件,对任何packages文件夹的引用都为零。
如果我从 proj2 中删除了 nuget 包 Microsoft.Bcl.Build,它会成功编译,但我收到一条警告,说任何引用 proj1 的项目都必须安装该包。
我可以安全地删除它并忽略警告吗?否则当我使用 PackageReference 时,我不确定它为什么引用 packages.config 文件。
这是最新的 VS 2019。
java ×3
testng ×3
jenkins ×2
azure-devops ×1
cryptography ×1
email ×1
email-ext ×1
encryption ×1
java-8 ×1
maven ×1
nuget ×1