草庐IT

OpenStack搭建史上最详细步骤 (快速入手)

高龄码农创业 2023-04-14 原文

前提环境

搭建openstack平台所需要的两个镜像包:CentOS-7-X86_64-DVD-1804.iso 和 chinaskill_cloud_iaas.iso镜像文件。

VMware上准备两台虚拟机,分别作为controller(控制)节点和compute节点. 下面是VMware上虚拟机的基础配置。

compute&&controller

双网卡,NAT模式和仅主机模式,配置硬盘各给50G

多添的一块网卡作为openstack对外提供服务的网络(创建云主机实例时使用的IP地址),默认的第一块网卡作为openstack本地服务的IP地址(访问openstack的WEB界面时的IP地址)

compute要加两块20G虚拟硬盘

controller内存4G以上 处理器两个以上

这里的NET模式的子网地址给的是100段(cidr)WEB访问的IP地址,仅主机模式的子网地址给的是200段的
​
这里controller节点给的IP是192.168.100.10
​
        compute节点给的IP是192.168.100.20
​
        网络配置器的网关设置的是192.168.100.02
​

一、基本配置

修改主机名

#controller执行 
​
[root@controller ~]hostnamectl set-hostname controller 
​
#compute 
​
[root@compute ~]hostnamectl set-hostname compute 
​
##修改后重新连接终端 
​
##MobaXterm中按ctrl+d 退出 按R重新登陆 
​
##SecureCRTPortable中按ctrl+d 退出 按回车重新登陆 
​
##直接bash执行也可,不过后面执行脚本可能报错
​
##su也可以使之生效

 

配置网络

1.利用vi文本编辑器去配置虚拟机的虚拟网卡

#controller

[root@controller ~]vi /etc/sysconfig/network-scripts/ifcfg-ens33                #ifcfg-需要配置的网卡名
​
BOOTPROTO=dhcp            #修改为static静态IP
​
ONBOOT=no                 # 修改为yes,设为开机自启
​
#文件最后添加
​
IPADDR=192.168.100.10            #配置的IP地址,根据虚拟网络编辑器的网段来配置
​
NETMASK=255.255.255.0            #子网掩码,也可以用PREFIX=24来表示
​
GATEWAY=192.168.100.2            #网关
​
DNS1=114.114.114.114             #DNS域名解析
​
DNS2=8.8.8.8                     #备用DNS域名解析
​
# :wq (保存退出)
​

2.配置好后重启网络服务,使配置生效

[root@controller ~]systemctl restart network              #第一种重启网络的方法
[root@controller ~]service network restart                  #第二种重启网络的方法
​
​
#可能出现的问题:网络重启报错先停掉NetworkManager
[root@controller ~]systemctl stop NetworkManager
​
#也可以直接将NetworkManager,disable掉

3.看是否能ping通,利用远程工具(Xshell,SecureCRT,mobaXterm等)去连接虚拟机

[root@controller ~]ifconfig                                              #查看网卡的网络参数
​
[root@controller ~]ping baidu.com
​
第二快网卡无需配置,后面跑脚本的时候会自动将它kill掉,作为创建云主机实例的IP地址

4.当第一台VM虚拟机的网卡配置好,用命令或手动点击将VM虚拟机关机后,对它进行克隆,克隆出的虚拟机作为compute节点

poweroff                                      #第一种关机命令
shutdown -h now                               #第二种关机命令
init 0                                        #第三种关机命令
记得克隆时最好选择完全克隆,它是独立的,并不依赖controller节点,当你删掉controller节点也不会影响到compute节点。
​
​
克隆完成后重命名,修改它的配置,给compute虚拟机增加两块20G的硬盘,分别提供给cinder和swift组件
​
​
修改克隆机的IP地址IPADDR=192.168.100.20 
​
​
删除/etc/sysconfig/network-scripts/ifcfg-ens33文件中的UUID一行,UUID不能重复
​
​
在vi编辑器命令行模式下按dd删除光标所在的一行(因为克隆虚拟机的配置是controller节点的配置)
​

二、基本环境

1.配置域名解析文件

#contreller && compute

[root@controller ~]vim /etc/hosts
​
#结尾添加这两行IP地址+主机名
​
192.168.100.10    controller
​
192.168.100.20    compute
​
​
​
[root@controller ~]scp /etc/hosts 192.168.100.20:/etc/hosts
#将controller节点上的配置文件传输到compute节点上将其替换
​

#这一步做完后,后面就可以直接使用域名(controller,compute)来代替IP地址了

2.挂载镜像文件

#controller

[root@controller ~]mkdir /opt/{centos,openstack}             #创建两个需要被挂载的本地路径
​
#yum源配置好后,将iaas镜像上传,这里centos镜像虚拟机配置使用了,它默认存储在/dev/cdrom 或 /dev/sr0中,可以直接将存放centos镜像的路径挂载到/opt/centos下了


[root@controller ~]mount /dev/cdrom  /opt/centos/
​
#以只读方式挂载
​
#我们也可以在/etc/fstab中进行配置,让它开机自动挂载,这样在启动虚拟机时就不用再手动挂载了(用于直接挂载到挂载点的时候使用)
​
[root@controller ~]vim /etc/fstab
​
#在结尾添加
​
/dev/cdrom            /opt/centos               iso9660 defaults             0    0
​
 
#接下来在挂载iaas镜像
​
[root@controller ~]mount chinaskills_cloud_iaas.iso  /mnt/
​
[root@controller ~]cp -rvf /mnt/* /opt/openstack
​
[root@controller ~]umount /mnt/
​

3.配置本地yum源

#controller

#备份本地网络yum源
[root@controller ~]mv /etc/yum.repos.d/* /mnt/ 
​
[root@controller ~]vi /etc/yum.repos.d/centos.repo
​
[centos]
​
name=centos
​
baseurl=file:///opt/centos
​
gpgcheck=0
​
enabled=1
​
[iaas]
​
name=iaas
​
baseurl=file:///opt/openstack/iaas-repo
​
gpgcheck=0
​
enabled=1
​
#配置好本地yum源后,我们需要清理一下yum源缓存,和列出能用的yum仓库中的包
​
[root@controller ~]yum makecache 
​
#或
​
[root@controller ~]yum clean all;yum makecache 
​
#或
​
[root@controller ~]yum clean all;yum repolist
​

 如图挂载成功

#compute

#备份本地网络yum源
[root@compute ~]mv /etc/yum.repos.d/* /mnt/ 
​
#创建repo文件
​
[root@compute ~]vi /etc/yum.repos.d/centos.repo
​
[centos]
​
name=centos
​
baseurl=ftp://192.168.100.10/centos
​
gpgcheck=0
​
enabled=1
​
[iaas]
​
name=iaas
​
baseurl=ftp://192.168.100.10/openstack/iaas-repo
​
gpgcheck=0
​
enabled=1
​

[root@compute ~] yum makecache

4.搭建ftp服务器,开启并设置自启

#controller

[root@controller ~]yum install vsftpd -y ​

[root@controller ~]vi /etc/vsftpd/vsftpd.conf 
​
#添加 
anon_root=/opt/ 
#保存退出 
​
​
#或:
echo "anon_root=/opt/" >> /etc/vsftpd/vsftpd.conf 
​
​
#重启服务,使修改的配置生效,并设置开机自启
[root@controller ~]systemctl start vsftpd && systemctl enable vsftpd 
​

#comput

#验证ftp 
​
[root@compute ~]curl -L ftp://192.168.100.10                       #ftp://controllerIP 
​
#这里连接成功会返回controller下opt目录内信息
​
​
​
[root@compute ~]yum clean all;yum makecache 
​
#或
​
[root@compute ~]yum clean all;yum repolist 
​

5.关闭防火墙

#contreller && compute

 #两个节点都需要关闭
[root@controller ~]systemctl stop firewalld.service && systemctl disable firewalld.service                      #关闭防火墙和移除防火墙
​
[root@controller ~]yum remove -y NetworkManager firewalld
​
[root@controller ~]yum -y install iptables-services
​
[root@controller ~]systemctl enable iptables
​
[root@controller ~]systemctl restart iptables
​
[root@controller ~]iptables -F
​
[root@controller ~]iptables -X
​
[root@controller ~]iptables -Z
​
[root@controller ~]service iptables save                #清空规则
​

##可以只关闭防火墙而不写入配置,在将要执行的脚本中会卸载掉防火墙,selinux同理,此时关闭是为了后面的ftp

6.关闭SELinux

#contreller && compute

#临时关闭selinux模式和永久关闭selinux规则
​
[root@controller ~]setenforce 0 && sed -i 's/SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config 
​
​
​
[root@controller ~]getenforce                          #检测是否关闭selinux 
​
​
​
#可能出现问题:ssh远程连接慢时执行,一般不需要 
​
[root@controller ~]sed -i -e 's/#UseDNS yes /UseDns no/g' -e 's/GSSAPIAuthentcation 
​
yes/GSSAPIAuthenticationno/g' /etc/ssh/sshd_config 
​

三、编辑环境变量

#contreller && compute

[root@controller ~]yum install iaas-xiandian -y                          #安装xiandian包 

分盘(根据自己的情况)

# compute 分盘

#这里可以不用分盘了,因为我们一开始就多配置了两块虚拟硬盘,使用fdisk -l查看
[root@controller ~]fdisk /dev/sdb
​
n
​
#两次回车 
​
+100G
​
n
​
p
​
#三次回车 
​
w
​
lsblk       #查看 
​

1.修改xiandian服务的配置文件

# controller

#编辑文件/etc/xiandian/openrc.sh,此文件是安装过程中的各项参数,根据每项参数上一行的说明及服务器实际情况进行配置。 
​
​
[root@controller ~]cd /etc/xiandian/ 
​
[root@controller ~]sed -i "/=/s/#//g" openrc.sh 
​
[root@controller ~]sed -i "/PASS/s/PASS=/PASS=000000/g" openrc.sh 
​
#或:
[root@controller ~]vi /etc/xiandian/openrc.sh
​
#进入配置文件后需要在命令行模式下敲
:%s/^#//g                                                      # 一行中只带有一个#注释的,作用去除#注释
:%s/PASS=/PASS=000000/g                       # 将PASS=全部替换成PASS=000000,这样省的我们自己手动敲很多代码了
​
​
​

还需要手动修改,需要修改的地方已在后面增加注释        有的地方还需输入六个零

--------------------system Config--------------------##
​
Controller Server Manager IP. example:x.x.x.x
​
HOST_IP=192.168.100.10                            #controller节点的IP地址
​
Controller HOST Password. example:000000
​
HOST_PASS=000000
Controller Server hostname. example:controller
​
HOST_NAME=controller                              #controller节点的主机名
​
Compute Node Manager IP. example:x.x.x.x
​
HOST_IP_NODE=192.168.100.20                        #compute节点的IP地址
​
Compute HOST Password. example:000000
​
HOST_PASS_NODE=000000
​
Compute Node hostname. example:compute
​
HOST_NAME_NODE=compute                           #compute节点的主机名
​
--------------------Chrony Config-------------------##
​
Controller network segment IP.  example:x.x.0.0/16(x.x.x.0/24)
​
network_segment_IP=192.168.100.0/24               #控制节点的网段
​
--------------------Rabbit Config ------------------##
​
user for rabbit. example:openstack
​
RABBIT_USER=openstack                           #rabbit用户名
​
Password for rabbit user .example:000000
​
RABBIT_PASS=000000
​
--------------------MySQL Config---------------------##
​
Password for MySQL root user . exmaple:000000
​
DB_PASS=000000
​
--------------------Keystone Config------------------##
​
Password for Keystore admin user. exmaple:000000
​
DOMAIN_NAME=demo                          #OpenStack中登录页面的认证域名
ADMIN_PASS=000000
DEMO_PASS=000000
​
Password for Mysql keystore user. exmaple:000000
​
KEYSTONE_DBPASS=000000
​
--------------------Glance Config--------------------##
​
Password for Mysql glance user. exmaple:000000
​
GLANCE_DBPASS=000000
​
Password for Keystore glance user. exmaple:000000
​
GLANCE_PASS=000000
​
--------------------Nova Config----------------------##
​
Password for Mysql nova user. exmaple:000000
​
NOVA_DBPASS=000000
​
Password for Keystore nova user. exmaple:000000
​
NOVA_PASS=000000
​
--------------------Neturon Config-------------------##
​
Password for Mysql neutron user. exmaple:000000
​
NEUTRON_DBPASS=000000
​
Password for Keystore neutron user. exmaple:000000
​
NEUTRON_PASS=000000
​
metadata secret for neutron. exmaple:000000
​
METADATA_SECRET=000000
​
Tunnel Network Interface. example:x.x.x.x
​
INTERFACE_IP=192.168.100.10                  #隧道接口的IP地址,填当前节点的IP地址即本机IP
​
External Network Interface. example:eth1
​
INTERFACE_NAME=ens36                           #第二块网卡作为外网,对外提供服务(云主机实例)的网卡名
​
External Network The Physical Adapter. example:provider
​
Physical_NAME=provider                         #物理适配器的外网
​
First Vlan ID in VLAN RANGE for VLAN Network. exmaple:101
​
minvlan=5                                      #VLAN最小从5开始(自己根据需要来给定)
​
Last Vlan ID in VLAN RANGE for VLAN Network. example:200
​
maxvlan=201                                     #VLAN最大到201
​
--------------------Cinder Config--------------------##
​
Password for Mysql cinder user. exmaple:000000
​
CINDER_DBPASS=000000
​
Password for Keystore cinder user. exmaple:000000
​
CINDER_PASS=000000
​
Cinder Block Disk. example:md126p3
​
BLOCK_DISK=sdb                                  #compute节点增加的第一快磁盘名称(lsblk查看)
​
--------------------Swift Config---------------------##
​
Password for Keystore swift user. exmaple:000000
​
SWIFT_PASS=000000
​
The NODE Object Disk for Swift. example:md126p4.
​
OBJECT_DISK=sdc                                 #compute节点的增加的第二快磁盘名称
​
The NODE IP for Swift Storage Network. example:x.x.x.x.
​
STORAGE_LOCAL_NET_IP=192.168.100.20             #对象存储的IP地址
​
--------------------Heat Config----------------------##
​
Password for Mysql heat user. exmaple:000000
​
HEAT_DBPASS=000000
​
Password for Keystore heat user. exmaple:000000
​
HEAT_PASS=000000
​
--------------------Zun Config-----------------------##
​
Password for Mysql Zun user. exmaple:000000
​
ZUN_DBPASS=000000
​
Password for Keystore Zun user. exmaple:000000
​
ZUN_PASS=000000
​
Password for Mysql Kuryr user. exmaple:000000
​
KURYR_DBPASS=000000
​
Password for Keystore Kuryr user. exmaple:000000
​
KURYR_PASS=000000
​
--------------------Ceilometer Config----------------##
​
Password for Gnocchi ceilometer user. exmaple:000000
​
CEILOMETER_DBPASS=000000
​
Password for Keystore ceilometer user. exmaple:000000
​
CEILOMETER_PASS=000000
​
--------------------AODH Config----------------##
​
Password for Mysql AODH user. exmaple:000000
​
AODH_DBPASS=000000
​
Password for Keystore AODH user. exmaple:000000
​
AODH_PASS=000000
​
--------------------Barbican Config----------------##
​
Password for Mysql Barbican user. exmaple:000000
​
BARBICAN_DBPASS=000000
​
Password for Keystore Barbican user. exmaple:000000
​
BARBICAN_PASS=000000
​
​
​

# controller

#通过scp方法将修改过的xiandian配置文件传输到compute节点
​
#scp发送: 
​
[root@controller ~]scp -rp openrc.sh root@192.168.100.20:/etc/xiandian/openrc.sh 
​
# 或 
​
[root@controller ~]scp !$ compute:/etc/xiandian/openrc.sh #此时应写入host,否则用IP代替compute 
​
#等效于 
​
[root@controller ~]scp /etc/xiandian/openrc.sh compute:/etc/xiandian/openr.sh 
​
##将controller目录下的文件传输到computer下,即把配置好的文件发给另一个节点(并替换对应文件) 
​

# compute

#在compute节点中配置文件/etc/xiandian/openrc.sh下修改第69行的IP地址,改成对应节点的IP地址(在compute节点只需修改这一行) 
​
[root@compute ~]INTERFACE_IP=192.168.100.20 
​
#修改完成后保存退出

四、通过脚本安装服务

1.执行脚本iaas-pre-host.sh进行安装

基础配置操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

Controller&&Compute

​ [root@controller ~]iaas-pre-host.sh ​

#安装完成后两个节点都需要Ctrl+D同时重启一下虚拟机

#或

[root@controller ~]reboot ​

今天遇到一个yum安装报错如下:

错误:软件包:glibc-2.17-196.el7.i686 (centos7)
需要:glibc-common = 2.17-196.el7
已安装: glibc-common-2.17-222.el7.x86_64 (@anaconda)
glibc-common = 2.17-222.el7
可用: glibc-common-2.17-196.el7.x86_64 (centos7)

原因:yum源没有对应版本包匹配
解决办法:

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    sed -i  's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
    
    yum repolist 
    

2.接下来开始跑部署OpenStack各个组件的脚本了

进入/usr/local/bin目录下(脚本存放的位置)

这里为了方便,我在脚本中执行了一下脚本

ls | tee 1.sh        #查看当前目录下的脚本文件并将结果发送到tee命令,tee命令将输出显示到终端,同时将其保存在1.sh文件中
​
​
#在1.sh脚本中将几个需要跑的组件脚本排序,并将不需要跑的组件脚本删掉(在1.sh中操作,需熟练掌握vi编辑器下命令行模式(默认模式)下的快捷命令,在这里会用到 yy : 复制,p : 粘贴,dd : 删除 )

controller节点执行脚本顺序 [ mysql组件,keystone组件,glance组件,nova-controller组件,neutron-controller组件,dashboard组件,cinder-controller组件,swift-controller组件 ] (跑完controller节点,再跑compute节点

compute节点执行脚本的顺序 [ nova-compute组件,neutron-compute组件,cinder-compute组件,swift-compute组件]

#给1.sh增加可执行权限
chmod +x 1.sh

执行:

./1.sh

 五、搭建完成,web访问

两边都跑完后,去浏览器输入 192.168.100.10/dashboard 访问OpenStack

恭喜完成搭建!!!(一个萌新的攻略,有不对的地方还大神指教)

完成后可以关注我~~~去看我的另一篇   T版搭建       非常详细

这是我写的第一篇所以排版不是很好,多多关照

有关OpenStack搭建史上最详细步骤 (快速入手)的更多相关文章

  1. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  2. ruby - cucumber 特征和步骤定义 - 2

    我是Cucumber测试的新手。我创建了两个特征文件:events.featurepartner.feature并将我的步骤定义放在step_definitions文件夹中:./step_definitions/events.rbpartner.rbCucumber似乎在所有.rb文件中查找步骤信息。有没有办法限制该功能查看特定的步骤定义文件?我之所以要这样做,是因为即使我使用了--guess标志,我也会遇到不明确的匹配错误。我之所以要这样做,有以下几个原因。我正在测试CMS,并希望在不同的功能中测试每种不同的内容类型(事件和合作伙伴)。事件.特征Feature:AddpartnerA

  3. ruby - 如何在 Cucumber 步骤定义中使单词可选? - 2

    我在下面有一个步骤定义,它执行我想要它执行的操作,即它根据“PAGES”哈希的“page”元素检查页面的url。Then(/^Ishould(still)?beatthe"(.*)"page$/)do|still,page|BROWSER.url.should==PAGES[page]end步骤定义用于两者我应该在...页面我应该还在...页面但是,我不需要将“still”传递到block中。我只需要它是可选的以匹配步骤但不传递到block中。我该怎么做?谢谢。 最佳答案 您想将“静止”组标记为非捕获。这是通过使用?:启动组来完成的

  4. ruby - 如何以表格格式快速打印 Ruby 哈希值? - 2

    有没有办法快速将表格格式的ruby​​哈希打印到文件中?如:keyAkeyBkeyC...1232343451253474456...其中散列的值是不同大小的数组。还是使用双循环是唯一的方法?谢谢 最佳答案 试试我写的这个gem(在表中打印散列、ruby对象、ActiveRecord对象):http://github.com/arches/table_print 关于ruby-如何以表格格式快速打印Ruby哈希值?,我们在StackOverflow上找到一个类似的问题:

  5. 电脑启动后显示器黑屏怎么办?排查下面4个问题,快速解决 - 2

    电脑启动出现显示器黑屏是一个相当常见的问题。如果您遇到了这个问题,不要惊慌,因为它有很多可能的原因,可以采取一些简单的措施来解决它。在本文中,小编将介绍下面4种常见的电脑启动后显示器黑屏的原因,排查这些原因,快速解决! 演示机型:联想Ideapad700-15ISK-ISE系统版本:Windows10一、显示器问题如果出现电脑启动后显示器黑屏的情况。那么首先您需要检查一下显示器是否正常工作。您可以通过更换另一个显示器或将当前显示器连接到另一台计算机来检查显示器是否存在问题。如果问题仍然存在,那么您可以排除显示器故障的可能性。 二、显卡问题如果您的电脑配备了独立显卡,那么显卡故障也可能是导致电脑

  6. 100个python算法超详细讲解:画直线 - 2

    1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva

  7. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  8. ruby - 如何预期失败的步骤并传递 cucumber 中的失败? - 2

    我们想测试cucumber的步骤定义。我们希望能够检查的一件事是我们期望失败的测试实际上失败了。为此,我们想编写我们知道会失败的场景并将它们添加到我们的测试套件中,但标记或以其他方式表示它们以便当且仅当它们失败时它们“通过”。如何解决这个问题? 最佳答案 您应该测试负面状态。失败的步骤只是通过步骤的倒数。所以做这样的事情:Then/ishouldnotbetrue/dosome_value.should_notbe_trueend这就是我进行失败测试的方式。您还可以捕获异常等,并验证block是否确实抛出该异常lambdadosom

  9. ruby - ruby 方法查找中的*实际*步骤是什么? - 2

    我已经阅读了有关此主题的stackoverflow帖子以及包括APrimeronRubyMethodLookup在内的几篇文章,WhatisthemethodlookuppathinRuby.此外,我查看了RubyMetaprogramming2中的对象模型章节,在几个聊天室中询问,并做了thisredditthread。.除了学习C,我已经尽我所能来解决这个问题。如上述资源所述,这6个位置在接收对象(如fido_instance)的方法查找期间(按顺序)被检查。:fido_instance的单例类IClass(来自扩展模块)IClass(来自前置模块)类IClass(来自包含的模块)

  10. ruby - 使单元测试快速失败以进行突变测试 - 2

    mutationtesting遇到一个问题是它很慢,因为默认情况下您会为每个生成的突变执行完整的测试运行(测试文件或一组测试文件)。加快突变测试的一种方法是,一旦遇到单一故障(但仅在突变测试期间),就停止对给定突变体的测试运行。更好的做法是让变异测试者记住杀死最后一个变异体的第一个测试是什么,并将其首先交给下一个变异体。ruby中是否有任何东西可以做这些事情,或者我最好的选择是开始猴子修补?(是的,我知道单元测试应该很快。显示所有失败的测试在突变测试之外很有用,因为它不仅可以帮助您识别出问题,还可以查明哪里出了问题)编辑:我目前正在对测试/单元使用heckle。如果测试/单元不可能记住

随机推荐