我在Windows Server 2012 R2上运行了一个TFS 2017实例,其中有一个运行Windows 10的测试框。
我遇到了一个非常奇怪的问题。我的大多数自动CodedUI测试都运行得很好。但是,我注意到TFS在执行新构建时并不总是会获取代码更改,至少在测试代码区域中没有。
构建本身运行良好,新代码总是被合并到那些。但是,当最新版本触发包含CodedUI测试的版本时,这些测试并不总是获取最新版本。
我注意到这主要在我的App.config文件中,该文件包含未更新的连接字符串。在一个案例中,我有三个测试显然成功运行,但随后他们使用旧App.config文件中的值再次运行。
我也发现对[TestCategory()]属性的更改也不总是被选中。我使用该类别来指定我希望在特定版本构建中运行哪些测试。我对我的类别使用相同单词的变体:CodedUI,CodedUIExtended,CodedUIStage。起初我以为系统正在做某种StartsWith并拿起其他名字,但当我告诉它运行CodedUI时,它运行的是CodedUI和CodedUIStage类别。
[TestCategory("CodedUI"), TestMethod]
public void UI_Login_AdminAuthenticate()
{
...
}
因为CodedUIStage类别最近被更改并且曾经是CodedUI,这导致我怀疑在TFS中使用了某种缓存。
有人能说清楚为什么我的类别和app.config更改没有被正确选取吗?造成这种情况的原因是什么,当我尝试部署修正/更正时,它是否会发生在代码本身?
编辑:
正如所建议的那样,我尝试检查TFS构建配置上的clean选项,但它没有任何影响。 在构建时立即触发的版本确实显示它正在使用新完成的构建号。 并且查看工件,测试dll已修改当前日期,因此看起来它刚刚创建。
test.dll.config似乎是个问题。在工件中,它有一个非常旧的Date修改,并不是签入TFS的当前版本。通常,这会感觉像是一个干净的问题,但是在执行构建或发布时,TFS始终会删除并重新复制所有目标文件。我已经验证了在此过程中观看文件被删除并在文件系统上重新创建的文件。 C:\ agent_work \ r6 \ a \ [artifact_name] \ bin
EDIT2:
通过更多探索,构建工件是正确的。当版本将这些工件复制到发布过程中时,问题就会发生。
一周前,我在TFS中重命名了包含解决方案内部测试项目的文件夹。旧文件夹名称显示在Release复制到其自身的工件中。新文件夹名称也会显示,这意味着我现在有两个dll,这会导致问题。
我不确定Release在哪里找到旧文件夹的副本。我明确地从发布工件的副本中删除了它,并重新运行了构建和发布,并显示了它。
答案 0 :(得分:0)
感谢Daniel的建议,我最终发现在创建工件之后,我的构建过程随后将它们发布到文件系统上的一个单独的位置。
不幸的是,复制和发布构建工件任务没有像基本的复制文件任务那样的干净功能。
因此,每当从构建中删除文件时,当Release过程试图获取它认为的工件时,它们仍然存在于该位置。所以它最终会抓取额外的文件。
从该辅助工件目标位置手动删除旧文件解决了该问题。