命令行程序测试自动化

news2024/9/28 7:18:26

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程,刷完面试就稳了,你也可以当高薪软件测试工程师(自动化测试)

这几天有一个小工具需要做测试,是一个命令行工具,这个命令行工具有点类似mdbg等命令行工具,即程序运行后,在命令行等待用户敲入的命令,处理命令并显示结果,再继续等待用户敲入新的命令。

原来的测试用例都是手工执行的,即在测试文档里写明输入什么命令,期望得到什么结果之类的。这种手工的工作当然要自动化执行才行。

但是自动化测试这个工具有一个问题,因为这个工具不象其他的命令行程序—接受一些命令行参数,处理一下并显示结果,然后退出。而是在命令行不断地接受新的指令,处理并回显,再接受用户新的命令。因此不能用普通的 批处理的方式来执行测试。

要对这种程序执行自动化测试,主要是利用到每个进程启动时,实际上都是有三个默认已经打开的文件,标准输入(Standard Input)、标准输出(Standard Output)和标准错误输出(Standard Error)。对于命令行程序来说,标准输入就是键盘,标准输出就是电脑屏幕,默认情况下,标准错误输出和标准输出使用的是同一个文件(在现代操作系统中,所有的设备都被看成文件,不光光是Linux, Unix这么处理,其实Windows也是这么处理的)。

进程的标准输入、输出以及错误输出在启动进程之前实际上是可以更换的,这也就是进程间通信经常采用的一个技术—管道技术。即,你可以通过管道技术,将一个进程的标准输入和另一个进程的标准输出连接起来,这样一个进程输出一些数据后,另外一个进程就自动获得这些数据。下面这个简单的命令就是管道的一个应用:

dir | sort

上面的命令就是把dir命令的输出的数据直接传递到sort的输入中,这样sort就可以进行相应的排序,过程如下图所示:

在Win32编程里,使用管道稍微显得麻烦点,但是在.NET里,替换和关闭进程的标准输入、输出和错误输出都是相当简单的工作。假设下面这个程序是我们即将测试的命令行程序,它的工作很简单,就是不停地回显用户在命令行输入的字符串,最后用户敲击空格时,退出程序执行:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication

{
    public class Program

    {
        public static void Main()

        {
            string command = null;

            do

            {
                Console.Write(">");

                command = Console.ReadLine();

                Console.WriteLine();

                command = command.TrimEnd();

                Console.WriteLine("Hello: {0}", command);

            }

            while (!string.IsNullOrEmpty(command));

            Console.WriteLine("Quiting ...");

        }

    }

}

下面是自动化测试程序,它的工作就是打开待测得命令行程序,使用管道技术向待测程序的标准输入传递命令,然后从待测程序的标准输出读取结果:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Diagnostics;

namespace CmdTest

{
    class Program

    {
        static void Main(string[] args)

        {
            if (args.Length != 1)

            {
                Console.WriteLine("Usage: CmdTest <Application>");

                return;

            }

            var cmd = args[0];

            var startinfo = new ProcessStartInfo(cmd);

            startinfo.UseShellExecute = false;

            startinfo.RedirectStandardInput = true;

            startinfo.RedirectStandardOutput = true;

            startinfo.RedirectStandardError = true;

            var process = new Process();

            process.StartInfo = startinfo;

            process.Start();

            var names = new string[] {
                "Yimin",

                "Zhang San",

                "Li Si",

                "Wang Wu"

            };

            foreach (var name in names)

            {
                process.StandardInput.WriteLine(name);

                process.StandardInput.Flush();

                // Skip the echo characters

                process.StandardOutput.ReadLine();

                var result = process.StandardOutput.ReadLine();

                if (result != string.Format("Hello: {0}", name))

                    Console.WriteLine("Error!");

            }

            process.StandardInput.WriteLine();

            process.WaitForExit();

        }

    }

}

 下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

 

文档获取方式:

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1035120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue+Element-UI】实现登陆注册界面及axios之get、post请求登录功能实现、跨域问题的解决

目录 一、实现登陆注册界面 1、前期准备 2、登录静态页实现 2.1、创建Vue组件 2.2、静态页面实现 2.3、配置路由 2.4、更改App.vue样式 2.5、效果 3、注册静态页实现 3.1、静态页面实现 3.2、配置路由 3.3、效果 二、axios 1、前期准备 1.1、准备项目 1.2、安装…

pytorch学习------数据集的使用方式

一、前言 在深度学习中&#xff0c;数据量通常是都非常多&#xff0c;非常大的&#xff0c;如此大量的数据&#xff0c;不可能一次性的在模型中进行向前的计算和反向传播&#xff0c;经常我们会对整个数据进行随机的打乱顺序&#xff0c;把数据处理成一个个的batch&#xff0c…

【力扣1464】数组中两元素的最大乘积

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析1、排序2、最值模拟 一、题目描述 题目链接&#xff1a;数组中两元素的最大乘积 给你一个整数数…

针对 SAP 的增强现实技术

增强现实技术是对现实世界的一种交互式模拟。这种功能受到各种企业和制造商的欢迎&#xff0c;因为它可以减少生产停机时间、快速发现问题并维护流程&#xff0c;从而提高运营效率。许多安卓应用都在探索增强现实技术。 使用增强现实技术&#xff08;AR&#xff09;的Liquid U…

【Vue入门】语法 —— 事件处理器、自定义组件、组件通信

目录 一、事件处理器 1.1 样式绑定 1.2 事件修饰符 1.3 按键修饰符 1.4 常用控制符 1.4.1 常用字符综合案例 1.4.2 修饰符 二、自定义组件 2.1 组件介绍及定义 2.2 组件通信 2.2.1 组件传参&#xff08;父 -> 子&#xff09; 2.2.1 组件传参&#xff08;子 ->…

【Leuanghing】ANSA入门——GUI界面介绍

【Leuanghing】ANSA入门——软件介绍 大家好&#xff01;今天为大家推荐一款软件 —— ANSA。ANSA是目前公认的全球最快捷的CAE前处理软件之一&#xff0c;也是一个功能强大的通用CAE前处理软件。 一、相关介绍 BETA CAE Systems S.A公司总部位地希腊的赛萨罗尼奇市(Thessalon…

水平基准和垂直基准

水平基准 针对不同的地理空间测量&#xff0c;水平基准可以是一个参考点或一个参考点集。在地球上&#xff0c;相同的位置上的点可能有不同的坐标&#xff0c;取决于使用了哪种基准。 水平基准用于测量地球上的位置&#xff08;position&#xff09;。因为地球不是一个完美的球…

linux————zabbix搭建

目录 一、zabbix的概述 二、构成 一、server 二、web页面 三、数据库 四、proxy 五、agent 三、zabbix监控对象 四、zabbix的常用术语 五、zabbix监控框架 一、zabbix——client架构 二、zabbix_proxy_client架构 六、zabbix部署 安装zabbix5.0存储库 ​编辑​编…

flume安装及实战

flume官方下载地址&#xff1a;Welcome to Apache Flume — Apache Flume 一、flume安装 &#xff08;1&#xff09;解压至安装目录 tar -zxf ./apache-flume-1.9.0-bin.tar.gz -C /opt/soft/ &#xff08;2&#xff09;配置文件flume-env.sh cd /opt/soft/flume190/conf …

Visual Studio 功能增强:CMake 目标视图

Visual Studio 中的 CMake 目标视图&#xff0c;允许你按 CMake 目标可视化 CMake 项目结构&#xff0c;并生成指定的目标库和可执行文件。 为了使此视图更易于使用&#xff0c;我们实施了一些新的改进&#xff0c;使导航 CMake 目标比以往任何时候都更容易。这包括改进了到 C…

网络安全——黑客(自学)

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01;&#xff01;&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队…

通过人才测评系统来帮助Team Leader组建团队

作为HR除了对外招聘、培训、员工关系以外&#xff0c;如果有部门立项需要进行团队建设&#xff0c;也需要HR向领导推送相关简历&#xff0c;看似简单的过程&#xff0c;实际上也是困难重重&#xff0c;因为大多团建需求 都不是那么详细&#xff0c;然后挑简历的时候&#xff0c…

9.22数电(触发器寄存器一些电路分析reg的思考)

用作存储元件的电路 新输入的信号可能使电路保持同样的状态也可能使电路进入另一种新的状态 输入信号置位与复位可以用于改变构成存储元件的电路状态 RS锁存器 通过或非门就是说输入信号中有一个是1&#xff0c;输出就的是0 在RS0时&#xff0c;RS对或非门的结果无影响&am…

【多态】为什么析构函数的名称统一处理为destructor?

析构函数的名称统一处理为destructor的目的是为了解决析构函数的重写。 而这又引出了一个问题&#xff1a;为什么要进行析构函数的重写&#xff1f; 是为了下面这种情况&#xff1a; class Person { public:~Person() { cout << "~Person" << endl; } }…

java:java.util.MissingResourceException: Cant find bundle for base name解决方式

java&#xff1a;java.util.MissingResourceException: Cant find bundle for base name解决方式 1 前言 代码执行如下&#xff1a; ResourceBundle.getBundle("res.Message",Locale.getDefault(), ReadMyProps.class.getClassLoader());或 ResourceBundle.getBu…

WPF Panel笔记

1、StackPanel默认垂直排列&#xff0c;不会自动换行&#xff0c;展示可能不全。改变内元素的排列方式&#xff0c;需要用orientation属性 2、wrapPanel默认横向排列&#xff0c;会自动换行。改变内元素的排列方式&#xff0c;需要用orientation属性。 3、DockPanel默认属性&am…

获取文件上次访问时间

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Java源码 public void testGetFileTime() {try {String string "E://test.txt";File file new File(string);Path path file.toPath();BasicFileAttributes ba…

07_ElasticSearch:倒排序索引与分词Analysis

07_ElasticSearch&#xff1a;倒排序索引与分词Analysis 一、 倒排索引是什么&#xff1f;1.1 通过示例&#xff0c;简单理解下1.2 核心组成 二、倒排索引是怎么工作的&#xff1f;2.1 创建倒排索引2.2 倒排索引搜索 三、Analysis 进行分词3.1 Analyzer 由三部分组成3.2 Analyz…

ARP协议-介于数据链路层和网络层之间的协议

通过上一篇 IP协议 我们知道 目标IP目标网络 目标主机 &#x1f64b;‍ 也就是说 必须知道 接收方的接收方的 MAC地址 > 没有MAC地址无法封装 MAC帧 在网络层&#xff0c;我们可以知道目标主机的 IP 地址&#xff0c; 但是 我们不知道对方的MAC地址 。 在同一个网段&…

Win10安装Docker Desktop并运行Tutorial示例

背景 前段时间一个项目需要在开发环境直接使用 Docker &#xff0c;为了省事便计划在本地安装 Desktop 版的 Docker 。其实安装过程比较简单&#xff0c;可视化安装即可&#xff0c;主要是对安装与初步使用时遇到的问题做个记录。 下载安装 下载地址&#xff1a;https://dow…