首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从包含的模块配置中运行特定套件的测试?

如何从包含的模块配置中运行特定套件的测试?
EN

Stack Overflow用户
提问于 2020-06-18 01:57:03
回答 1查看 809关注 0票数 2

我的项目根文件夹上有一个codeception.yml。这有一个包含配置指令,用于我的不同模块的其他欺骗yml。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
include:
    - tests/Modules/*

这将在这里作为多个应用程序设置来描述。

https://codeception.com/docs/08-Customization#One-Runner-for-Multiple-Applications

这些子信任有不同的套件吐露,在他们自己的codeception.yml中描述,就像在

测试/模块/前端/代码欺骗.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
suites:
    Presentation:
        path: Presentation
        class_name: PresentationTester
        modules:
...

问题:在我的项目根文件夹中,我无法为所有包含的模块运行一个特定的套件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vendor/bin/codecept run Presentation

上面写着

找不到

套房的“演示文稿”

运行指向某个配置的它确实有效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vendor/bin/codecept run Presentation -c tests/Modules/Frontend

但它只运行这一个模块。我想用一个命令运行所有模块的特定套件。

运行一个组(-g)也是有效的,因此这表明信任的加载是正确的。

为什么这不适用于套房?所有的信任都包括在我的主要yml,所以套房必须找到在我的意见。

当没有套间可以从中心点运行时,有这样的设置有什么意义呢?

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-09-29 23:19:05

更新:发现了一些问题和解决方案,请参考我的答案的结尾。

昨天我发现自己和你的处境一样。我是从以套件为中心的结构中重构我们的测试套件的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tests/
  unit/
    Module1/
    Module2/
    ... (more modules)
  integration/
    Module1/
    Module2/
    ... (more modules)
  ... (more suites)

一个新的以模块为中心的结构,如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tests/
  Module1/
    Unit/
    Integration/
    ... (more suites)
  Module2/
    Unit/
    Integration/
    ... (more suites)
  ... (more modules)

然而,在我看来,However并不支持这一点。在搜索和调试code代码之后,我找到了这些信息。

解决办法

在这里,https://github.com/Codeception/Codeception/issues/5486用户LeeShan8似乎发出了同样的问题,用户vertexvaar谈到了他制作的修补程序,该修补程序提供了一个--recurse-include选项,可以在每个子模块中运行特定的套件(可以从那里下载补丁)。

所以我从顶点库搜索了公关,想知道他的补丁是怎么回事。这是PR https://github.com/Codeception/Codeception/pull/5737,但由于SamMousa的不活动而关闭。

SamMousa指出了一个解决办法:--skip选项。

如果您想在每个子模块中从unit套件运行测试,可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
codecept run -s suite1 -s suite2 ...

其中suite1suite2 .都是不包括unit的测试套件。如果您跳过了所有其他套件,case将在每个子模块中运行其余的套件(在本例中是unit)。

我的解决方案

我真的不想通过列出unit选项中的所有其他套件来运行--skip套件。它太无聊了,写得很慢,而且容易出错。

我确实希望指定codecept run unit,并看到所有单元测试逐个模块地运行。所以我创建了一个小补丁(https://gist.github.com/mpallante/101b1508ffc5a2c4bf30d3344437ca0b)来修复这种行为。

它与vertexvar中的类似,但为了保持简单,我没有添加新选项。它只从每个子模块运行指定的套件。

我还使用composer-patches (https://github.com/cweagans/composer-patches)实现了补丁程序的自动化。

我安装了composer-patches

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
composer require cweagans/composer-patches

然后将补丁放在patches/allow-codeception-run-suites-from-submodules.patch中,并将composer.json更改为包含修补程序(在"extra"部分中):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  ...
  "extra": {
    ...
    "patches": {
      "codeception/codeception": {
        "Allow Codeception to run suites from submodules": "patches/allow-codeception-run-suites-from-submodules.patch"
      }
    }
  },
  ...

最后,我运行了composer update codeception/codeception:它将删除协同欺骗,重新安装它,并应用修补程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ php which composer update codeception/codeception
Gathering patches for root package.
Removing package codeception/codeception so that it can be re-installed and re-patched.
  - Removing codeception/codeception (4.1.7)
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
Gathering patches for root package.
Gathering patches for dependencies. This might take a minute.
  - Installing codeception/codeception (4.1.7): Loading from cache
  - Applying patches for codeception/codeception
    patches/allow-codeception-run-suites-from-submodules.patch (Allow Codeception to run suites from submodules)

注意事项

请注意,这是解决方案似乎在我的情况下,但它没有充分测试。我通常以极少数的方式运行conflicts (单个套件、所有套件、单个测试文件),所以不知道是否存在冲突。

然而,这可能是一个起点。

也许在将来的某个时候,我可以把这个补丁贡献给项目本身。

更新

我发现了一个小问题:当一个套件在子模块中定义,而不是全局定义时,codecept run会跳过它。

我通过这样在全局codeception.yml配置文件中定义套件来解决这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
include:
    - modules/*/Tests
suites:
    integration:
    unit:
paths:

   ...

然后,在每个子模块中,我定义了一个./modules/Mod1/Tests/codeception.yml文件,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
suites:
    unit:
        path: ./Unit
        modules:
            enabled:
                - Asserts
                - \Helper\Unit
    integration:
        path: ./Integration
        modules:
            enabled:
                - \Helper\Integration
namespace: Modules\Mod1\Tests
paths:
    tests: .
    output: ../../../tests/_output
    support: ../../../tests/_support
    data: ./_data

希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62447343

复制
相关文章
C#如何删除字符串中任何位置的空格?
你或许知道你能使用String.Trim()方法,去除字符串的头和尾的空格。不幸运的是,这个Trim方法不能去除字符串中间的C#空格。
高一峰
2020/09/22
11.8K0
C#如何删除字符串中任何位置的空格?
JavaScript 中获取光标位置
DOM中并没有直接获取光标位置的方法,那么我们只能间接来获取光标位置。DOM支持获取光标选中的范围,我们可以以此为切入点,来获取或定位光标的位置,当选取范围起始点和结束点一样时,就是光标插入的位置。
越陌度阡
2020/11/26
12.5K0
mysql 从json字符串中获取指定的key:
SELECT SUBSTR(detail,    LOCATE('"email"',detail)+LENGTH('"email":"'),    LOCATE('",', detail,LOCATE('"email"',detail))-(LOCATE('"email"',detail)+LENGTH('"email":"'))) AS email FROM tb_sync_moka2oa_full_detail where moka_id in ( 62923,    64242,    66971,    67197,    67198,    67304,    74124) and is_delete = 0 order by id desc limit 50  ; 虽然mysql 5.7之后支持 JSON_EXTRACT 了,我测试了下好像不行
凯哥Java
2022/12/16
7.4K0
Flutter 中获取地理位置[Flutter专题11]
如今,发现用户位置是移动应用程序非常常见且功能强大的用例。如果您曾经尝试过在 Android 中实现位置,您就会知道样例代码会变得多么复杂和混乱。
徐建国
2021/11/30
3.3K0
Flutter 中获取地理位置[Flutter专题11]
后端 | Java 利用substring()和indexOf()从字符串中获取指定的字符
代码: @Test void spiltStrDemo() { /* * str.substring(4, 9); -->在str中截取从下标4开始(包含),到下标9之间的字符(不包含9) * str.indexOf("/"); -->返回str中“/”第一次出现时的下标 * str.indexOf("/", 5); -->返回跳过str的前6个字符后,“/”第一次出现的下标。可以利用这个方法跳过前几个相同的字符
倾盖
2022/08/16
3.2K0
后端 | Java 利用substring()和indexOf()从字符串中获取指定的字符
Flutter中的获取设备信息以及获取地理位置
在使用之前,我们一定要好好阅读文档,关于Android以及iOS平台的相关配置,我在这里不做过多介绍,大家自己去看文档。
拉维
2019/09/10
12.3K0
【已解决】怎么获取字符串中相同字符串第N 个所在的位置
对于我们经常用的rangeOfString这个方法只能获取最近的一次出现的位置,而不能指定第几个出现的位置。
君赏
2018/09/07
2.5K0
替换字符串指定位置字符 php,php如何从指定位置替换字符串
在php中可以使用“substr_replace”函数实现从指定位置替换字符串,其语法是“substr_replace(string,replacement,start,length)”,参数start表示从指定位置开始替换。
全栈程序员站长
2022/08/31
3.6K0
替换字符串指定位置字符 php,php如何从指定位置替换字符串
C#中获取系统时间
static void Main(string[] args) { Console.WriteLine("获取日期加时间:"); string strDateandTime = DateTime.Now.ToString(); Console.WriteLine(strDateandTime); Console.WriteLine("获取日期:");
牛老师讲GIS
2018/10/23
4.2K0
C#中获取系统时间
C#学习---基础入门(四)C#中的字符与字符串
字符 char(单个字符) 用单引号 ,例如char a=‘a’;可以通过调用char类下的方法进行一些操作,具体通过help查看其相关方法
互联网CEO
2018/12/03
7940
C# 文本框 TextChanged 延时触发
public partial class DelayTextBox : TextBox { #region private globals private System.Timers.Timer DelayTimer; // used for the delay private bool TimerElapsed = false; // if true OnTextChanged is fired. private bool Key
跟着阿笨一起玩NET
2019/03/14
2K0
C#的WinForm窗体程序中如何设置TextBox为密码文本框
在C#的WinForm窗体程序开发过程中,TextBox是常用的文本框控件,默认的TextBox文本 框输入的内容是可见的,如果在Winform程序中要设置TextBox文本框为密码输入框应该如何设置呢?其实将TextBox文本框设置为密码输入 框,也非常的简单,只需要设置TextBox文本框属性中的PasswordChar属性值,PasswordChar属性值自定义,可以为*号,代表输 入字符显示星号,也可为其他自定义字符。
全栈程序员站长
2022/09/07
5.6K0
C#中字符,字符串的大小写转换
对字符串来说,"string".ToLower()和"string".ToUpper()可以基本满足需求,但是当需要将首字母大写的时候,这两个函数就有点不够用了.但还好,我们还有TextInfo类下的ToLittleCase方法.在使用TextInfo类时,必须指定区域性.要获得区域性,必须能够访问当前线程,从该线程中检索CurrentCulture属性.
望天
2018/08/02
2.3K0
从损坏的手机中获取数据
有时候,犯罪分子会故意损坏手机来破坏数据。比如粉碎、射击手机或是直接扔进水里,但取证专家仍然可以找到手机里的证据。
FB客服
2020/02/23
10.2K0
getBoundingClientRect方法获取元素在页面中的相对位置
获取元素位置可以用 offset 或 getBoundingClientRect,使用 offset 因为兼容性不好,比较麻烦,offset获取位置会形成“回溯”。而 getBoundingClientRect 方法则 兼容性较好,基本所有的浏览器都支持了,且使用起来更容易和简单。
用户6167509
2019/09/04
3.9K0
什么?RecyclerView中获取点击位置的接口被废弃了?
《第三行代码》这才刚刚出版,竟然就有API被弃用了,我决定对这个问题好好研究一下,并加急写一篇文章进行分析。
用户1158055
2020/04/24
4.5K0
什么?RecyclerView中获取点击位置的接口被废弃了?
通过IP获取位置
昨天写了个获取天气的API,那么我也该写一个调用这个API的Demo了。不过获取天气必须要城市名称,而Demo上不可能在弄一个输入城市的吧……好在,可以通过IP获取所在城市。 <?php if(iss
FHYC
2018/06/22
1.8K0
[译]C#和.NET中的字符串
原文地址:Jon Skeet:Strings in C# and .NET System.String 类型(在C#语言中对应的别名是string)是.NET最重要的类型之一,不幸的是在它身上存在了太
潘成涛
2018/01/18
2.5K0
VBA代码库08:获取字符串中指定位置的子字符串
下面的自定义函数:ExtractString函数,来源于《VBA Developer’s Handbook》,对于分析字符串来说,是一个很有用的函数。
fanjy
2019/09/19
3.4K0
VBA代码库08:获取字符串中指定位置的子字符串
获取地理位置
可根据获取到的经纬度查询到所在的地理位置。 <p><button onclick="geoFindMe()">Show my location</button></p> <div id
ProsperLee
2018/10/24
2K0
获取地理位置

相似问题

火场动态链接与世博会

11

是否有一种方法可以显式分离隐式链接的DLL?

13

是否有一种方法可以检查Dropbox中的文件/文件夹是否有共享链接而不创建链接?

10

是否有一种方法可以撤消分离的头状态,而不取消我在分离头状态中所做的工作?

17

是否有一种方法可以强迫浏览器加载链接而不访问缓存?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文