代码拉取完成,页面将自动刷新
同步操作将从 国创嵌入式测试小分队/mugen 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
mugen是openEuler社区开放的测试框架,提供公共配置和方法以便社区开发者进行测试代码的编写和执行
bash dep_install.sh
bash mugen.sh -c --ip $ip --password $passwd --user $user --port $port
{
"NODE": [
{
"ID": 1,
"LOCALTION": "local",
"MACHINE": "physical",
"FRAME": "aarch64",
"NIC": "eth0",
"MAC": "55:54:00:c8:a9:21",
"IPV4": "192.168.0.10",
"USER": "root",
"PASSWORD": "openEuler12#$",
"SSH_PORT": 22,
"BMC_IP": "",
"BMC_USER": "",
"BMC_PASSWORD": ""
},
{
"ID": 2,
"LOCALTION": "remote",
"MACHINE": "kvm",
"FRAME": "aarch64",
"NIC": "eth0",
"MAC": "55:54:00:c8:a9:22",
"IPV4": "192.168.0.11",
"USER": "root",
"PASSWORD": "openEuler12#$",
"SSH_PORT": 22,
"HOST_IP": "",
"HOST_USER": "",
"HOST_PASSWORD": "",
"HOST_SSH_PORT": ""
}
]
}
bash mugen.sh -a
bash mugen.sh -f testsuite
bash mugen.sh -f testsuite -r testcase
bash mugen.sh -a -x
bash mugen.sh -f testsuite -x
bash mugen.sh -f testsuite -r testcase -x
source ${OET_PATH}/libs/locallibs/common_lib.sh
# 需要预加载的数据、参数配置
function config_params() {
LOG_INFO "Start to config params of the case."
LOG_INFO "No params need to config."
LOG_INFO "End to config params of the case."
}
# 测试对象、测试需要的工具等安装准备
function pre_test() {
LOG_INFO "Start to prepare the test environment."
LOG_INFO "No pkgs need to install."
LOG_INFO "End to prepare the test environment."
}
# 测试点的执行
function run_test() {
LOG_INFO "Start to run test."
# 测试命令:ls
ls -CZl -all
CHECK_RESULT 0
# 测试/目录下是否存在proc|usr|roor|var|sys|etc|boot|dev目录
CHECK_RESULT "$(ls / | grep -cE 'proc|usr|roor|var|sys|etc|boot|dev')" 7
LOG_INFO "End to run test."
}
# 后置处理,恢复测试环境
function post_test() {
LOG_INFO "Start to restore the test environment."
LOG_INFO "Nothing to do."
LOG_INFO "End to restore the test environment."
}
main "$@"
# bash
source ${OET_PATH}/libs/locallibs/common_lib.sh
# python
import os, sys, subprocess
LIBS_PATH = os.environ.get("OET_PATH") + "/libs/locallibs"
sys.path.append(LIBS_PATH)
import xxx
# bash
LOG_INFO "$message"
LOG_WARN "$message"
LOG_DEBUG "$message"
LOG_ERROR "$message"
# python
import mugen_log
mugen_log.logging(level, message) # level:INFO,WARN,DEBUG,ERROR;message:日志输出
# bash
CHECK_RESULT $1 $2 $3 $4 $5
# $1:测试点的返回结果
# $2:预期结果
# $3:对比模式,0:返回结果和预期结果相等;1:返回结果和预期结果不等
# $4:发现问题,日志输出
# $5:退出模式,0:不管问题继续执行后续程序;1:发现问题后中断并退出此代码块
# bash
## func 1
DNF_INSTALL "vim bc" "$node_id"
DNF_REMOVE "$node_id" "jq" "$mode"
# mode:默认为0,会删除用例中安装的包,当为非0时,则只卸载当软件包
# python
import rpm_manage
tpmfile = rpm_manage.rpm_install(pkgs, node, tmpfile)
rpm_manage.rpm_remove(node, pkgs, tmpfile)
# bash
## func 1
SSH_CMD "$cmd" $remote_ip $remote_password $remote_user $time_out $remote_port`
## func 2
P_SSH_CMD --cmd $cmd --node $node(远端节点号)
P_SSH_CMD --cmd $cmd --ip $remote_ip --password $remote_password --port $remote_port --user $remote_user --timeout $timeout
# python
conn = ssh_cmd.pssh_conn(remote_ip, remote_password,remote_port,remote_user,remote_timeout)
exitcode, output = ssh_cmd.pssh_cmd(conn, cmd)
# port:默认为22
# user:默认为root
# timeout: 默认不限制
# bash
## func 1
### 本地文件传输到远端
`SSH_SCP $local_path/$file $REMOTE_USER@$REMOTE_IP:$remote_path "$REMOTE_PASSWD"`
### 远端文件传输到本地
`SSH_SCP $REMOTE_USER@$REMOTE_IP:$remote_path/$file $local_path "$REMOTE_PASSWD"`
## func 2
### 目录传输
SFTP get/put --localdir $localdir --remotedir $remotedir
### 文件传输
SFTP get/put --localdir $localdir --remotedir $remotedir --localfile/remotefile $localfile/$remotefile
# python
### 目录传输
import ssh_cmd, sftp
conn = ssh_cmd.pssh_conn(remote_ip, remote_password,remote_port,remote_user,remote_timeout)
psftp_get(conn,remote_dir, local_dir)
psftp_put(local_dir=local_dir, remote_dir=remote_dir)
### 文件传输
import ssh_cmd, sftp
psftp_get(remote_dir, remote_file, local_dir)
psftp_put(local_dir=local_dir, local_file=local_file, remote_dir=remote_dir)
# get:从远端获取
# put:传输到远端
# localdir: 默认为当前目录
# remotedir:默认为远端根目录
# bash
GET_FREE_PORT $ip
# python
import free_port
free_port.find_free_port(ip)
# bash
IS_FREE_PORT $port $ip
# python
import free_port
free_port.is_free_port(port, ip)
# bash
TEST_NIC $node_id
# python
import get_test_device
get_test_nic(node_id)
# node_id:默认为1号节点
# bash
TEST_DISK $node_id
# python
import get_test_device
get_test_disk(node_id)
# node_id:默认为1号节点
# bash
SLEEP_WAIT $wait_time $cmd
# python
import sleep_wait
sleep_wait.sleep_wait(wait_time,cmd)
# bash
REMOTE_REBOOT_WAIT $node_id $wait_time
cmd > /dev/nul 2>&1 &
bash dep_install.sh
bash dep_install.sh -e
(嵌入式)
组合配置使用json文件对组合测试进行配置,json文件示例
{
// 配置运行环境需要export的环境变量
"export": {
"FIND_TINY_DIR":"/home/openeuler/tmp_image/tiny"
},
// 运行环境配置,可选,支持host、qemu(嵌入式场景),必须为列表,即使只有一个
"env": [
{
// 类型 type 必须配置,qemu类型kernal_img_path、initrd_path、qemu_type必配,其他参数参考qemu_ctl.sh参数
"type": "qemu",
// 名称 name 必须配置
"name": "qemu_1",
// kernal_img_path、initrd_path可以为本机目录,也可以是网络地址,如果配置目录不存在则会使用wget下载
"kernal_img_path": "https://mirrors.nju.edu.cn/openeuler/openEuler-22.03-LTS-SP1/embedded_img/arm64/aarch64-std/zImage",
"initrd_path": "https://mirrors.nju.edu.cn/openeuler/openEuler-22.03-LTS-SP1/embedded_img/arm64/aarch64-std/openeuler-image-qemu-aarch64-20221228125551.rootfs.cpio.gz",
"option_wait_time": "180",
"login_wait_str": "openEuler Embedded(openEuler Embedded Reference Distro)",
"qemu_type": "aarch64",
// 嵌入式sdk路径配置,可以为本机目录,也可以是网络地址,如果配置目录不存在则会使用wget下载
"sdk_path":"https://mirrors.nju.edu.cn/openeuler/openEuler-22.03-LTS-SP1/embedded_img/arm64/aarch64-std/openeuler-glibc-x86_64-openeuler-image-aarch64-qemu-aarch64-toolchain-22.03.sh",
"put_all":true
},
{
// 类型 type 必须配置,host类型,ip、password比配,其他参数参考bash mugen.sh -c
"type": "host",
// 名称 name 必须配置
"name": "host_1",
"ip": "192.168.10.100",
"password": "openEuler@123",
"port": "22",
"user": "root",
"run_remote": true,
"copy_all": true
}
],
// 测试套组合配置,必配,必须为列表,可为多个组合
"combination": [
{
// 组合名称 name
"name": "normal_test",
// 测试用例组合, 必须为列表
"testcases": [
{
// 使用全部测试套
"testsuite": "embedded_os_basic_test"
},
{
// 使用testsuite指定测试套中add里包含的测试用例组成一个新的测试套
"testsuite": "embedded_os_basic_extra_test",
"add": ["oe_test_kmod_depmod", "oe_test_libcap_libcap"]
},
{
// 使用testsuite指定测试套中删除del里包含的测试用例组成一个新的测试套
"testsuite": "embedded_security_config_test",
"del": "oe_test_check_file_sys_protect_003"
}
]
},
{
"name": "easy_test",
"testcases": [
{
"testsuite": "embedded_os_basic_test"
}
]
}
],
// 执行关系,可选,必须为列表
"execute":[
{
// 执行环境,必须为列表,env中应为前面运行环境配置中的运行环境名称
"env":["qemu_1", "qemu_2"],
// 执行组合名称,仅支持配置一个
"combination":"normal_test"
},
{
"env":["qemu_2"],
"combination":"easy_test"
},
{
"env":["host_1"],
"combination":"easy_test"
}
]
}
bash combination.sh 组合配置名(在combination目录中,不需要.json) 生成配置组合文件夹及执行脚本 示例:
bash combination.sh embedded_ci_test
bash combination.sh --all 执行所有在combination目录中的配置文件
bash combination.sh -f 组合配置文件(不在combination目录中,需要绝对路径,包含.json后最) 示例:
bash combination.sh -f /home/openeuler/test.json
bash combination.sh -d 组合配置文件所在目录(不在combination目录中,需要绝对路径,配置文件必须为.json后缀) 示例:
bash combination.sh -d /home/openeuler/
bash combination.sh 组合配置名 -r 生成配置组合文件夹及执行脚本并执行脚本,并打印执行结果 示例:
bash combination.sh -r embedded_ci_test
bash combination.sh -r -a
bash combination.sh -r -f /home/openeuler/test.json
bash combination.sh -r -d /home/openeuler/
bash combination.sh -p 打印配置执行脚本执行结果 示例:
bash combination.sh -p
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。