cpu,内存,磁盘io,网络io。
部分参考了一下微软msdn的这篇文章Tools To Simulate CPU / Memory / Disk Load
图形化工具 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内存。
直接参考使用 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
这个也可以使用和linux下 iperf
基本一致。
server端
client端
iperf -u -c IP -i 2 -b 40M -t 600
首先讲一下回归测试windows尽可能自动化,降低手工操作的思路:
curl
,注意虽然和linux下curl
不完全一样,但是能实现下载并保存为文件的需求。下文有描述通过 scurl
键映射一键下载对应回归的工具包。
实现穿透vnc快捷键映射的动机:
目标,把gui操作尽可能的cli化(利用powershell
)。
例如:关闭防火墙
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
挂载云硬盘操作
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
操作效果如下:
如果需要批量进行多台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
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
本文来自网易实践者社区,经作者黄哲骁授权发布。