成都创新互联网站制作重庆分公司

go语言远程桌面 go语言桌面开发

测试开发之系统篇-按需创建测试虚拟机

首先,我们来了解一下KVM虚拟机有关的几个概念和工具。

创新互联是一家专业提供沽源企业网站建设,专注与成都做网站、网站制作、H5建站、小程序制作等业务。10年已为沽源众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

新建KVM虚拟机时,可以指定另一磁盘文件作为 BackingFile 。BackingFile是一个 只读 的虚拟磁盘基础映像,可以在多个虚拟机间进行共享。基于BackingFile创建和运行虚拟机时,只会在自己的磁盘文件中增量地写入文件,从而提高效率、节省磁盘和维护成本。

虚拟机快照 保存了虚拟机在某个指定时间点的状态,当我们在自动化测试过程中遭遇问题或错误时,可以利用快照保存、并恢复到执行中的某个时间点。借助BackingFile机制,虚拟机支持形如以下的多层依赖的快照链。

可使用以下命令,将处于快照链中的某个虚机,导出形成一个独立的磁盘映像文件,其不再依赖其它映像。

假设我们在用户的工作目录中,建立了以下目录。

下面用一个例子,给大家介绍下快速创建测试虚拟机的方法。

(1)按照上一篇文章中的步骤,创建一个Win10虚拟机;

(2)在虚拟机中,安装好工作中用到的测试软件;

(3)使用以下命令,新建一个共享工具磁盘;

(4)挂载共享磁盘到虚拟机,复制工具和文件到该盘中;

(5)移除该虚拟机,确认对话框中,请选择不删除相关磁盘文件;

(6)移动原虚机主磁盘文件到基础镜像目录,如

kvm/base/windows/win10/x64-pro-zh_cn.qcow2。

(7)执行以下命令,以上述基础镜像作为BackingFile,创建新的虚拟机磁盘;

(8)图形界面中,新建测试虚拟机,挂在新建的虚拟机和共享磁盘。

除了使用图形界面的qemu-manager软件,这里也提供一种命令行的方法,大家可用于测试平台的代码中。

(9)导出虚拟机XML配置文件

(10)修改XML配置文件中的以下字段:nameuuidvcpumemory和currentMemorymac address第1块disk的source file

(11)在第1块disk的Elemnt中,加入以下BackingFile有关的内容:

(12)如需要用页面VNC访问虚拟机桌面,找到XML的graphics元素,修改成以下内容。

(13)使用以下命令定义虚拟机。

(14)使用以下命令启动虚拟机。

(15)使用以下命令获取虚拟机的VNC端口编号,在VNC软件中使用”5900+该数字“的端口,访问虚拟机远程桌面。

另外,本人使用GO语言实现了基于libvirt接口的虚拟机管理有关功能,此开源项目旨在为大家提供一个基于KVM虚拟机和Docker容器的、按需测试环境管理平台,详情请参照GitHub上的easysoft/zagent项目。

常用命令:

surface go怎么设置远程

右键单击“此电脑”,选择“属性”选项,点击左边的“远程设置”。

勾选远程协助下的“允许远程协助连接这台计算机”和远程桌面下的“允许远程连接到此计算机”,点击“确定”。

在控制端打开运行窗口,输入mstsc开启远程控制设置,输入被控制端的ip地址,点击“连接”进行控制即可。

如何使用Go语言实现远程执行命令

一般命令

所谓一般命令,就是在一定时间内会执行完的命令。比如 grep, cat 等等。 执行命令的步骤是:连接,执行,获取结果

连接

连接包含了认证,可以使用 password 或者 sshkey 2种方式来认证。下面的示例为了简单,使用了密码认证的方式来完成连接。

import (

"fmt"

"time"

"golang.org/x/crypto/ssh"

)

func connect(user, password, host string, port int) (*ssh.Session, error) {

var (

auth []ssh.AuthMethod

addr string

clientConfig *ssh.ClientConfig

client *ssh.Client

session *ssh.Session

err error

)

// get auth method

auth = make([]ssh.AuthMethod, 0)

auth = append(auth, ssh.Password(password))

clientConfig = ssh.ClientConfig{

User: user,

Auth: auth,

Timeout: 30 * time.Second,

}

// connet to ssh

addr = fmt.Sprintf("%s:%d", host, port)

if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {

return nil, err

}

// create session

if session, err = client.NewSession(); err != nil {

return nil, err

}

return session, nil

}

连接的方法很简单,只要提供登录主机的 用户*, *密码*, *主机名或者IP*, *SSH端口

执行,命令获取结果

连接成功后,执行命令很简单

import (

"fmt"

"log"

"os"

"time"

"golang.org/x/crypto/ssh"

)

func main() {

session, err := connect("root", "xxxxx", "127.0.0.1", 22)

if err != nil {

log.Fatal(err)

}

defer session.Close()

session.Run("ls /; ls /abc")

}

上面代码运行之后,虽然命令正常执行了,但是没有正常输出的结果,也没有异常输出的结果。 要想显示结果,需要将 session 的 Stdout 和 Stderr 重定向 修改 func main 为如下:

func main() {

session, err := connect("root", "xxxxx", "127.0.0.1", 22)

if err != nil {

log.Fatal(err)

}

defer session.Close()

session.Stdout = os.Stdout

session.Stderr = os.Stderr

session.Run("ls /; ls /abc")

}

这样就能在屏幕上显示正常,异常的信息了。

交互式命令

上面的方式无法远程执行交互式命令,比如 top , 远程编辑一个文件,比如 vi /etc/nginx/nginx.conf 如果要支持交互式的命令,需要当前的terminal来接管远程的 PTY。

func main() {

session, err := connect("root", "olordjesus", "dockers.iotalabs.io", 2210)

if err != nil {

log.Fatal(err)

}

defer session.Close()

fd := int(os.Stdin.Fd())

oldState, err := terminal.MakeRaw(fd)

if err != nil {

panic(err)

}

defer terminal.Restore(fd, oldState)

// excute command

session.Stdout = os.Stdout

session.Stderr = os.Stderr

session.Stdin = os.Stdin

termWidth, termHeight, err := terminal.GetSize(fd)

if err != nil {

panic(err)

}

// Set up terminal modes

modes := ssh.TerminalModes{

ssh.ECHO: 1, // enable echoing

ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud

ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud

}

// Request pseudo terminal

if err := session.RequestPty("xterm-256color", termHeight, termWidth, modes); err != nil {

log.Fatal(err)

}

session.Run("top")

}

surface go3支持远程桌面吗

支持远程桌面。

SurfaceGo3不仅沿用了前代产品的设计,其他产品配置的提升也不明显,这也使其成为了微软今年最不令人兴奋的新产品。

当然,这并不会改变SurfaceGo3的地位,正如微软所说,SurfaceGo3依然是目前市面上最具便携性的Surface设备。


网站栏目:go语言远程桌面 go语言桌面开发
分享网址:http://cxhlcq.com/article/doochdi.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部