首页 > 系统相关 >VMWare Workstation 17命令行自动化测试高级用法详解

VMWare Workstation 17命令行自动化测试高级用法详解

时间:2024-05-15 20:51:57浏览次数:23  
标签:Workstation 17 虚拟机 vm start vmrun SSH PATH VMWare

VMware Workstation 是一个强大的桌面虚拟化解决方案,允许用户在同一台物理机上运行多个虚拟机。虽然 VMware Workstation 主要提供图形用户界面 (GUI) 来管理虚拟机,但它也支持命令行工具来执行一些高级任务和自动化操作。

VMware Workstation 本身并不直接提供一套完整的命令行工具集,但 VMware 提供了一套名为 vmware-vdiskmanagervmrunvixdisklib 等的工具,这些工具可以在命令行环境中使用,用于管理虚拟机磁盘、执行虚拟机操作等。

1. vmware-vdiskmanager

vmware-vdiskmanager 是一个用于管理 VMware 虚拟磁盘的命令行工具。它可以用于创建、扩展、压缩、转换和修复虚拟磁盘。

基本用法:

  • 创建新磁盘:vmware-vdiskmanager -c -s <容量> -a lsilogic -t <类型> <磁盘文件路径>
  • 扩展磁盘:vmware-vdiskmanager -x <新容量> <磁盘文件路径>
  • 压缩磁盘:vmware-vdiskmanager -k <磁盘文件路径>

2. vmrun

vmrun 是一个用于管理 VMware 虚拟机的命令行工具。它支持启动、停止、挂起、恢复、克隆虚拟机等操作。

基本用法:

  • 启动虚拟机:vmrun start <vmx文件路径>
  • 停止虚拟机:vmrun stop <vmx文件路径> [hard|soft|guest]
  • 列出所有运行的虚拟机:vmrun list
  • 克隆虚拟机:vmrun clone <源vmx文件路径> <目标vmx文件路径> [full|linked|snapshot]

3. 高级用法和自动化

除了上述基本用法外,这些命令行工具还支持更多的选项和参数,以实现更高级的功能和自动化操作。

  • 自动化脚本:你可以编写脚本来自动化虚拟机的创建、配置、启动和停止等操作。例如,使用 Bash 脚本结合 vmrun 命令来管理一组虚拟机。
  • 批量操作:使用命令行工具可以方便地对多个虚拟机执行批量操作,如同时启动多个虚拟机或批量克隆虚拟机。
  • 集成到其他系统:你可以将 VMware 的命令行工具集成到其他系统中,如持续集成/持续部署 (CI/CD) 系统或自动化运维系统,以实现更复杂的虚拟化环境管理。
  • 监控和日志记录:结合命令行工具的输出和日志记录功能,你可以监控虚拟机的状态和性能,并收集有用的日志信息以进行故障排除和性能优化。

4. 注意事项

  • 在使用命令行工具之前,请确保你已经安装了 VMware Workstation 并正确配置了相关环境变量。
  • 仔细阅读每个命令行工具的文档和手册,以了解所有可用的选项和参数以及它们的作用和用法。
  • 在执行任何可能修改虚拟机或虚拟磁盘的操作之前,请务必备份相关数据以防止意外丢失。
  • 注意命令行工具的输出和日志信息,以便在出现问题时进行故障排除和性能优化。

当涉及到使用 VMware Workstation 命令行工具进行自动化测试时,通常会结合其他脚本语言(如 Bash、PowerShell、Python 等)来编写自动化脚本,以执行一系列虚拟机管理任务。以下是一个简化的 Bash 脚本示例,它使用 vmrun 命令来自动化启动、执行命令并关闭一个 VMware Workstation 中的虚拟机。

假设你已经有了 VMware Workstation 的虚拟机,并且 vmrun 命令在你的系统路径中可用。

#!/bin/bash

# 设置虚拟机的 vmx 文件路径
VM_PATH="/path/to/your/virtual_machine.vmx"

# 启动虚拟机
function start_vm() {
    echo "Starting virtual machine..."
    vmrun start $VM_PATH nogui
    # 等待虚拟机启动完成(这里是一个简单的等待时间,可以根据实际情况调整或优化)
    sleep 30
}

# 在虚拟机中执行命令(假设已经登录到虚拟机或使用了某种自动化登录方法)
function execute_command_in_vm() {
    echo "Executing command in virtual machine..."
    # 注意:vmrun 并不直接支持在虚拟机内部执行命令
    # 你可能需要使用其他方法,如 SSH、VNC 自动化工具等
    # 以下是一个假设使用 SSH 的例子
    SSH_USER="your_username"
    SSH_PASS="your_password" # 在实际使用中,不推荐明文存储密码,应使用密钥或更安全的方法
    SSH_COMMAND="ls -l /path/to/test/directory"
    sshpass -p $SSH_PASS ssh -o StrictHostKeyChecking=no $SSH_USER@localhost "$SSH_COMMAND"
    # 注意:localhost 在这里只是一个示例,你需要使用虚拟机的实际 IP 或主机名
}

# 关闭虚拟机
function stop_vm() {
    echo "Stopping virtual machine..."
    vmrun stop $VM_PATH soft
}

# 执行流程
start_vm
execute_command_in_vm
stop_vm

echo "Automation script completed."

重要提示

  1. vmrun 不支持直接执行命令vmrun 命令本身并不支持在虚拟机内部执行命令。上面的脚本示例中的 execute_command_in_vm 函数是一个假设的例子,它使用了 SSH 来在虚拟机内部执行命令。在实际应用中,你需要确保虚拟机已经配置好了 SSH 服务,并且你有权限通过 SSH 连接到虚拟机。

  2. 安全性:在脚本中明文存储密码(如 SSH 密码)是不安全的。在实际应用中,你应该使用密钥对或其他更安全的方法来验证 SSH 连接。

  3. 等待时间:在上面的脚本中,我们使用了简单的 sleep 命令来等待虚拟机启动完成。在更复杂的场景中,你可能需要实现更智能的等待机制,比如检查虚拟机的状态或等待某个特定的端口变得可用。

  4. 错误处理:上面的脚本没有包含错误处理逻辑。在实际应用中,你应该添加适当的错误处理代码来捕获和处理可能出现的错误情况。

  5. 日志记录:为了跟踪脚本的执行情况,你可能需要添加日志记录功能来记录重要的信息或错误消息。

为了展示更复杂的自动化测试场景,我们可以考虑一个更完整的例子,其中包括:

  1. 检查虚拟机是否在运行
  2. 如果不在运行,则启动虚拟机
  3. 等待虚拟机启动完成
  4. 通过 SSH 连接到虚拟机并运行一系列测试命令
  5. 收集测试输出或结果
  6. 关闭虚拟机

以下是一个使用 Bash 脚本和 SSH 的示例,该示例假设你已经配置了 SSH 密钥认证,以便无需密码即可连接到虚拟机:

#!/bin/bash

# 设置变量
VM_PATH="/path/to/your/virtual_machine.vmx"
VM_NAME="your_virtual_machine_name"
SSH_USER="your_username"
SSH_KEY_PATH="/path/to/your/ssh_key"
REMOTE_TEST_SCRIPT="/path/to/remote/test_script.sh"
TEST_RESULTS_PATH="/path/to/local/test_results.txt"

# 检查虚拟机是否在运行
function check_vm_status() {
    vmrun list | grep -q "$VM_NAME" && return 0 || return 1
}

# 启动虚拟机
function start_vm() {
    echo "Starting virtual machine..."
    vmrun start $VM_PATH nogui
}

# 等待虚拟机启动完成
function wait_for_vm_to_start() {
    local attempts=0
    local max_attempts=10
    local sleep_time=10 # 等待 10 秒后检查一次

    echo "Waiting for virtual machine to start..."
    while ! check_vm_status && [ $attempts -lt $max_attempts ]; do
        sleep $sleep_time
        attempts=$((attempts+1))
    done

    if ! check_vm_status; then
        echo "Virtual machine did not start within the specified time."
        exit 1
    fi

    echo "Virtual machine started successfully."
}

# 通过 SSH 执行远程命令
function execute_remote_command() {
    local cmd=$1
    ssh -o StrictHostKeyChecking=no -i $SSH_KEY_PATH $SSH_USER@localhost "$cmd"
}

# 执行测试
function run_tests() {
    echo "Running tests on virtual machine..."

    # 假设你有一个在虚拟机上的测试脚本
    execute_remote_command "$REMOTE_TEST_SCRIPT"

    # 你也可以逐条执行命令并收集输出
    # local output=$(execute_remote_command "your_command_here")
    # echo "$output" >> $TEST_RESULTS_PATH
}

# 关闭虚拟机
function stop_vm() {
    echo "Stopping virtual machine..."
    vmrun stop $VM_PATH soft
}

# 主流程
if ! check_vm_status; then
    start_vm
    wait_for_vm_to_start
fi

run_tests

# 你可以在这里添加逻辑来检查测试结果或处理输出
# 例如,你可以将测试结果从虚拟机复制到本地,或者分析测试输出文件

stop_vm

echo "Automation script completed."

注意

  • 请确保你已经将 SSH_USERSSH_KEY_PATHVM_PATHVM_NAMEREMOTE_TEST_SCRIPTTEST_RESULTS_PATH 替换为适当的值。
  • 这个脚本假设虚拟机使用 localhost 作为 SSH 连接的主机名,这通常只在虚拟机使用主机网络或 NAT 网络并通过端口转发连接到宿主机时有效。如果虚拟机有独立的 IP 地址,请使用该 IP 地址替换 localhost
  • 脚本中的 wait_for_vm_to_start 函数使用了简单的轮询机制来检查虚拟机是否启动。在实际应用中,你可能需要更复杂的逻辑来确定虚拟机何时准备好接受 SSH 连接。
  • 你可能需要根据实际情况调整 max_attemptssleep_time 的值。
  • 请确保 REMOTE_TEST_SCRIPT 存在于虚拟机上,并且具有执行权限。这个脚本应该包含你要在虚拟机上运行的所有测试命令。
  • 你可以根据需要扩展 run_tests 函数来执行更复杂的测试任务,并收集和处理测试结果。

如果觉得以上资源可以帮助到您,请扫码支持作者,您的支持就是创作最大的动力!

标签:Workstation,17,虚拟机,vm,start,vmrun,SSH,PATH,VMWare
From: https://www.cnblogs.com/suzhoulaowang/p/18194680

相关文章

  • 如何让Vmware虚拟机ubuntu20.04使用物理机(windows11)下的魔法能力(浏览器及命令行下载、
    ​首先点击VMware下的“编辑”》虚拟网络编辑器,得到如图所示画面。​​​​​如果没有VMnet0就到桌面上右键VMware图标选择属性,然后如图:兼容性>以管理员身份运行此程序。然后重新打开就有了。然后桥接模式不要选择自动设置,如何选择继续往下看。在主机中cmd命令行输入:syste......
  • VMware Workstation Pro各版本下载(2024.5.5之后)
    最近有人反映说之前的VMwareWorkstation链接无法下载VMware,索性直接分享几个常用安装包,大家可以点击链接下载。整理不易,点赞关注一下吧1.系统要求VM17:硬件要求较高,Windows10或更高版64位。VM16:硬件要求较高,Windows10或更高版64位。VM12:硬件要求低,Windows7或更高版64位......
  • 基于UltraScale架构的XCVU3P-3FFVC1517E XCVU3P-2FFVC1517I XCVU3P-1FFVC1517E高性能
    概述VirtexUltraScale+器件是基于14nm/16nmFinFET节点的高性能FPGA,支持3DIC技术和多种计算密集型应用。AMD第三代3DIC使用堆叠硅片互联(SSI)技术打破了摩尔定律的限制,并且实现了最高信号处理和串行I/O带宽,以满足最严格的设计要求。它还提供了一个虚拟的单片设......
  • VMware Fusion 13.5.2 for Mac 发布,产品订阅模式首个重大变更
    VMwareFusion13.5.2forMac发布,产品订阅模式首个重大变更适用于基于Intel处理器和搭载Apple芯片的Mac的桌面虚拟化软件请访问原文链接:https://sysin.org/blog/vmware-fusion-13/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org好消息是:今天我们可以免费使......
  • Apple Safari 17.5 - macOS 专属浏览器 (独立安装包下载)
    AppleSafari17.5-macOS专属浏览器(独立安装包下载)适用于macOSVentura和macOSMonterey的Safari浏览器17请访问原文链接:https://sysin.org/blog/apple-safari-17/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org之前Safari浏览器伴随macOS更新一起......
  • VMware Workstation 17.5.2 Pro 发布,产品订阅模式首个重大变更
    VMwareWorkstation17.5.2Pro发布,产品订阅模式首个重大变更基于x86的Windows、Linux桌面虚拟化软件请访问原文链接:https://sysin.org/blog/vmware-workstation-17/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org好消息是:今天我们可以免费使用VMwareWorksta......
  • AtCoder Regular Contest 177
    AtCoderRegularContest177A-Exchange问题陈述判断\(n\)个价格分别为\(x_i\)的商品,问能否通过有限数量的\(1\)元,\(5\)元,\(10\)元,\(50\)元,\(100\)元,\(500\)元,购买。思路贪心。每个商品从\(500\)元开始,能用就尽量用。如果中间某个商品无法被满足,则无解,反......
  • C121 李超树+DP P4655 [CEOI2017] Building Bridges
    视频链接:C121李超树+DPP4655[CEOI2017]BuildingBridges_哔哩哔哩_bilibili   LuoguP4655[CEOI2017]BuildingBridges#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;#definelllonglong#definelsu<<......
  • P9175 [COCI2022-2023#4] Mreža 题解
    P9175[COCI2022-2023#4]Mreža题解前言我发现,有整体二分与主席树的地方总有莫队(不是那个莫队,是那个莫队)。知识点(树上)倍增,(树上)莫队,树状数组(“树”含量满满),分块。题意分析给定一棵树,每条边有一个权值\(v\),以及可以用一个花费\(c\)将它变成更大的权值\(s\)。再给定一......
  • VMware vSphere ESXI升级
    一、登录https://support.broadcom.com/官网,输入帐号和密码,如果没有帐号密码注册一个。 二、softwaer列表并选择“VMwareCloudFoundations”-----MyDownloads 三、点击“VMwarevsphere” 四、选择“定制ISO”输入HP 五、选择自己对应的服务器,点击下载 六、登录......