windows 云主机回归技巧

达芬奇密码2018-08-23 10:17

1.四大参数校验工具

cpu,内存,磁盘io,网络io。

部分参考了一下微软msdn的这篇文章Tools To Simulate CPU / Memory / Disk Load

cpu

图形化工具 CPUSTRES.EXE

这个工具比较简单,直接选择用几个thread,选择一下priority和activity优先级,即可产生不同的压力。

命令行工具,consume.exe。

consume 使用方法:

consume RESOURCE [-time SECONDS]

RESOURCE can be one of the following:

-physical-memory
-page-file
-disk-space
-cpu-time
-kernel-pool

内存

内存加压工具: testlimit.exe

Testlimit64.exe -d -c 2048

即占用2G内存。

磁盘io

直接参考使用 fio 注意ioengine 使用windowsaio

fio.exe --direct=1 --iodepth=1  --rw=randrw  --rwmixread=70  --bs=16k --size=1g   --ioengine=windowsaio   --group_reporting    --name=file --runtime=300 --time_based --numjobs=1 --thread   --filename=bench

网络io

这个也可以使用和linux下 iperf基本一致。

server端

client端

 iperf -u -c  IP  -i 2 -b 40M  -t 600

2.穿透vnc快捷键映射

首先讲一下回归测试windows尽可能自动化,降低手工操作的思路:

  1. 尽可能把测试工具,测试环境准备好(例如关闭防火墙),然后打一个镜像,使用这个镜像进行测试。
  2. 但是因为需要在不同环境中进行回归,以及由于各种目的,需要测试一个纯净的镜像等需求(例如在基础镜像中进行了一些小的变更),导致未能满足要求1.
  3. 所以考虑将测试工具打成一个压缩包,上传到对象存储上去。
  4. windows server2012使用浏览器下载十分繁琐,因为安全原因,需要很多鼠标点击操作关闭安全策略才能下载,正好调研发现powershell 自带一个curl,注意虽然和linux下curl不完全一样,但是能实现下载并保存为文件的需求。下文有描述通过 scurl键映射一键下载对应回归的工具包。

实现穿透vnc快捷键映射的动机:

  1. windows不方便自动化。
  2. 远程操作涉及到许多gui交互。(关闭防火墙等)
  3. vnc不能进行复制粘贴。

目标,把gui操作尽可能的cli化(利用powershell)。

例如:关闭防火墙

  1. 手工鼠标点击操作比较复杂
  2. 如果使用powershell

Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False

挂载云硬盘操作

  1. 鼠标点击操作相对复杂
  2. 如果使用powershell

Get-Disk | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS  -Confirm:$false

但是通过vnc,不能和宿主机进行复制黏贴,手输入那么大一串命令行不现实,而且容易出错。 需要做一个键映射,类似vim中的map。将一个较长的命令映射成一个较短的字符串。

考虑使用autohotkey实现。直接使用它的sendraw模块。将相关字符串已按键方式输出,正好输入到vnc中,进行操作。

一个autohotkey demo 脚本。之前使用f1-f10键作为映射键。考虑到相关命令日积月累越来越长,于是使用短命令来映射,我是用s作为leader key

::scurl::
sendraw curl http://testnos1.nos-eastchina1.126.net/windows_tool.zip -OutFile wintool.zip
sleep 10
return

::sdt::
sendraw  http://testnos1.nos-eastchina1.126.net/windows_tool.zip 
return

::sfire::
sendraw  Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
return

;check MTU
::smtu::
sendraw netsh interface ipv4  show subinterfaces
return

::sfio::
sendraw fio.exe --direct=1 --iodepth=1  --rw=randrw  --rwmixread=70  --bs=16k --size=1g   --ioengine=windowsaio   --group_reporting    --name=file --runtime=300 --time_based --numjobs=1 --thread   --filename=bench
return

::siperf::
sendraw iperf -u -c  223.252.223.153   -i 2 -b 40M  -t 600
return

::svol::
sendraw Get-Disk | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS  -Confirm:$false
return

::sping::
sendraw ping 114.114.114.114
return

操作效果如下:

3.ansible批量执行

如果需要批量进行多台windows云主机的测试,上述方法手工操作还是太多了,试想手工登录100台vnc然后进行某个操作,orz。

windows云主机的批量处理工具貌似没有linux那么丰富?调研发现某个博主这么说,然而我并没有chef相关经验,而且ansible貌似在windows部署方面也有所进展了。我调通了一个例子,能够实现一部分自动化。

凡是牵扯到工具选型的时候,如果你发现你处于一个非常纠结的地位,那可能是因为竞品工具没有一个能突出重围,导致你在它们各自的优缺点之间难以取舍。我也理解,工具选型要考虑的因素太多。这个项目的选型其实没经过太大波折,很快就决定使用Chef。原因我可以简单说一下,Puppet的API太不友好,ansible和salt对windows的支持程度未知,而根据我以前的经验,Chef对windows的支持还是比较成熟的。所以我们就快刀斩乱麻选择了Chef。

使用方式 ansible 分为server端和client端。这里client端即为被操作的windows云主机。而server端必须使用一台linux云主机,不支持windows!(囧)

server安装完ansible并进行配置之后

root@debian:/opt/ansible# vi hosts.ini

[windows]                                                                                                                                   
59.111.122.255

[windows:vars]
ansible_ssh_user=Administrator
ansible_ssh_pass=mypassword
ansible_ssh_port=5986
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore

client

windows云主机设置

1. 关闭防火墙  Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
2. 运行ConfigureRemotingForAnsible.ps1 这个文件

ad-hoc方式

root@debian-test-master:/opt/ansible# ansible windows -i hosts.ini -m win_ping
59.111.122.255 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

查看主机基本状况

root@debian-test-master:/opt/ansible# ansible windows -i hosts.ini  -m setup
59.111.100.25 | SUCCESS => {
    "ansible_facts": {
        "ansible_distribution": "Microsoft Windows NT 6.3.9600.0",
        "ansible_distribution_version": "6.3.9600.0",
        "ansible_fqdn": "WIN-AQJ5DL6898A",
        "ansible_hostname": "WIN-AQJ5DL6898A",
        "ansible_ip_addresses": [
            "10.173.32.16",
            "fe80::617c:a9ee:f457:cc63",
            "59.111.100.25",
            "fe80::7d2a:e355:45c6:495f"
        ],
        "ansible_os_family": "Windows",
        "ansible_system": "Win32NT",
        "ansible_totalmem": "4294967296"
    },
    "changed": false
}

使用play-book

root@debian-test-master:~/ansible-examples/windows# ansible-playbook  -i hosts.ini ping.yml

PLAY [Ping] ********************************************************************

TASK [setup] *******************************************************************
ok: [59.111.100.25]

TASK [ping] ********************************************************************
ok: [59.111.100.25]

PLAY RECAP *********************************************************************
59.111.100.25              : ok=2    changed=0    unreachable=0    failed=0

传入文件


root@debian-test-master:~/ansible-examples/windows# ansible-playbook  -i hosts.ini copy.yml 

PLAY [copy file] ***************************************************************

TASK [copy file test] **********************************************************
changed: [59.111.100.25]

PLAY RECAP *********************************************************************
59.111.100.25              : ok=1    changed=1    unreachable=0    failed=0

windows端可以看到

 

删除文件

root@debian-test-master:~/ansible-examples/windows# ansible windows   -m win_file -a 'path=c:\\sssgo  state=absent'
59.111.122.255 | SUCCESS => {
    "changed": true
}

即可看到文件被删除。


网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者黄哲骁授权发布。