软件测试实例

给你一个字符串,你怎么判断是不是ip地址?手写这段代码,并写出测试用例
IP的格式:(1–255).(0–255).(0–255).(0–255)

  1. 判断字符串是否为空
  2. 字符串长度范围:1.0.0.0 – 255.255.255.255(7–15)
  3. 字符串第一位和最后一位必须是数字
  4. 字符串用“.”分割,存在字符串数组String[] arr中。
    判断arr的长度是否是4.
    对每个字符判断是否是0–9
    判断每个字符串长度>1时,前面是否有多余的0,例如:001.002.003.004
    将每个字符串转换成int型,判断第一个的范围是否在 1-255,其他的范围是否在0–255. Integer.parseInt(String)的作用就是将String字符类型数据转换为Integer整型数据。
import java.util.Scanner;

public class test {
	public static void main(String[] args) {
		//从键盘中输入
		Scanner scanner = new Scanner(System.in);
		String ipStr = scanner.next();
		boolean isIpLegal = isIpLegal(ipStr);
		if(isIpLegal) {
			System.out.println(ipStr+"合法");
		}
		else {
			System.out.println(ipStr+"非法");
		}
	}

	private static boolean isIpLegal(String ipStr) {
		// TODO Auto-generated method stub
		//检查ip是否为空
		if(ipStr == null)
			return false;
		//检查IP长度,最短为:x.x.x.x(7位),最长为:xxx.xxx.xxx.xxx(15位)
		if(ipStr.length() < 7 || ipStr.length() >15)
			return false;
		//检查字符串首末位,如果不是数字,则报错
		if(!(ipStr.charAt(0) > 0 && ipStr.charAt(0) <= 9) || !(ipStr.charAt(ipStr.length()-1) >= 0 && ipStr.charAt(ipStr.length()-1) <= 9)){
			return false;
		}
		
		//按“.”分割字符串,并判断分割出来的个数,如果不是4,则非法。
		//数组中,length是属性,在字符串中,length()是方法
		String[] arr = ipStr.split("\\.");
		if(arr.length != 4)
			return false;

		for(int i = 0; i < arr.length; i++) {
			//如果每个字符串不是一位字符,且以'0'开头,则是非法的IP,如:01.002.03.004
			if(arr[i].length()>1 && arr[i].charAt(0) == 0)
				return false;
			//对每个字符串的每个字符进行逐一判断,如果不是数字0-9,则是非法的IP
			for(int j = 0; j < arr[i].length();j++) {
				if(arr[i].charAt(j) <'0' || arr[i].charAt(j) >'9')
					return false;
			}
		}

		//对拆分的每一个字符串进行转换成数字,并判断是否在0~255
		for(int i = 0; i<arr.length;i++) {
			int temp = Integer.parseInt(arr[i]);
			if(i == 0) {
				if(temp < 1 || temp > 255)
					return false;
			}
			else {
				if(temp < 0 || temp > 255)
					return false;
			}
		}
		return true;
	}
}
	

	从键盘中读入数据,转换成int型
	Scanner scanner = new Scanner(System.in);
	String str = scanner.next();
	int year = Integer.parseInt(str);

● 请你说一说简单用户界面登陆过程都需要做哪些分析

参考回答:
一、功能测试
1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。

2.输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息。

3.登录成功后能否能否跳转到正确的页面

4.用户名和密码,如果太短或者太长,应该怎么处理

5.用户名和密码,中有特殊字符(比如空格),和其他非英文的情况

6.记住用户名的功能

7.登陆失败后,不能记录密码的功能

8.用户名和密码前后有空格的处理

9.密码是否非明文显示显示,使用星号圆点等符号代替。

10.牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使 用者),刷新或换一个按钮是否好用

11.登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确

12.输入密码的时候,大写键盘开启的时候要有提示信息。

13.什么都不输入,点击提交按钮,检查提示信息。

二、界面测试

1.布局是否合理,testbox和按钮是否整齐。

2.testbox和按钮的长度,高度是否复合要求。

  1. 界面的设计风格是否与UI的设计风格统一。

  2. 界面中的文字简洁易懂,没有错别字。

三、性能测试

1.打开登录页面,需要的时间是否在需求要求的时间内。

2.输入正确的用户名和密码后,检查登录成功跳转到新页面的时间是否在需求要求的时间内。

3.模拟大量用户同时登陆,检查一定压力下能否正常登陆跳转。

四、安全性测试

1.登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)。

2.用户名和密码是否通过加密的方式,发送给Web服务器。

3.用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript 验证。

4.用户名和密码的输入框,应该屏蔽SQL注入攻击。

5.用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)。

6.防止暴力破解,检测是否有错误登陆的次数限制。

  1. 是否支持多用户在同一机器上登录。

  2. 同一用户能否在多台机器上登录。

五、可用性测试

  1. 是否可以全用键盘操作,是否有快捷键。

  2. 输入用户名,密码后按回车,是否可以登陆。

  3. 输入框能否可以以Tab键切换。

六、兼容性测试

1.不同浏览器下能否显示正常且功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)。

2.同种浏览器不同版本下能否显示正常且功能正常。

2.不同的平台是否能正常工作,比如Windows, Mac。

3.移动设备上是否正常工作,比如Iphone, Andriod。

4.不同的分辨率下显示是否正常。

七、本地化测试

  • 不同语言环境下,页面的显示是否正确。

● 请对这个系统做出测试用例:一个系统,多个摄像头,抓拍车牌,识别车牌,上传网上,网上展示

参考回答:
功能:
1.每个摄像头都能抓拍车牌;

2.每个摄像头抓拍到的车牌能正常交给系统处理;

3.系统能够正确识别车牌;

4.系统能够将识别出的车牌上传;

5.上传至网络的车牌能够正常展示出来;

一、功能测试

1.使用正常的车牌,保持车牌静止,检查每个摄像头是否能抓拍车牌;

2.使用类似非车牌的写有字的纸板,检查每个摄像头是否抓拍;

3.使用正常的车牌,保持车牌较高速移动,检查每个摄像头是否能抓拍车牌;

4.在多种情况下检查每个摄像头抓拍到的车牌能否正常交给系统处理,如临时断电、断网后能否正常将数据交给系统;

5.使用抓拍到的正常的车牌,交由系统处理,检查系统能否识别车牌;

6.使用非车牌的其他图片,交由系统处理,检查系统能否识别;

7.在多种情况下检查系统能否将正常识别出的车牌进行上传,如临时断电、断网后未上传数据是否能继续上传;

8.构造非车牌的其他内容的数据,检查系统能否将异常内容进行上传;

9.检查上传至网络的车牌能否正常展示出来;

10.上传非车牌的其他内容的数据,检查能否正常显示出来。

二、性能测试

1.同时向一个摄像头展示多个静止的车牌,检查摄像头能否抓拍到多个车牌;

2.同时向一个摄像头展示多个较高速运动的车牌,检查摄像头能否抓拍到多个车牌;

3.抓拍后,检查系统识别车牌的时间是否在需求要求的时间内;

4.模拟大量抓拍照片同时交由系统处理,检查一定压力下系统能否正常识别车牌;

5.模拟大量车牌同时上传,检查一定压力下能否上传成功。

三、安全性测试

1.检查是否能够通过给车牌加装饰物等方法,使摄像头无法抓拍或抓拍后系统无法正常识别车牌。

● 请你对吃鸡游戏进行压力测试

参考回答:
一.首先明确需要测试压力的内容:
1.游戏服务器硬件

a.硬盘I/o

b.内存

c.CPU

2.网络压力

a.长连接

a1.最大连接数

a2.流量(内网、外网、进、出)

b.长连接短周期(类似Http的TCP应用,这个比较特殊的一个需求,专门针对LoginAgent)

b1.每秒建立的连接数

b2.实际处理能力

3.数据库

a.每秒事务数

b.每秒锁等待数

c.平均延时(ms)

d.CPU暂用

4.多线程的最优线程数

a.数据库执行的多线程

b.多连接处理

二.Windows Server环境测试方式

1.服务器性能监测

使用Server自带的性能监测器设置各个进程的监测参数。Window的这个自动工具做的相当强大。大家自己摸一摸基本就会用了。每个参数都由详细的说明。

2.案例设计注意

a.对于数据库的性能测试上,现在由于所有的游戏服务器构架在DB前面都有一个实现DB缓冲功能的进程,以减少数据库频繁的读写操作。所以其实数据库的读是一个轻量级的数量;而数据库的写操作是一个周期性能过程。案例设计一定要能够驱动这种周期性能过程。比如我们游戏的战斗,导致游戏玩家数据的改变,或驱动所有在线玩家数据的周期性存储。

b.选择具有代表性,并且最频繁的游戏操作。用于进行最高用户在线的各种性能指标采集。如,开枪、道具拾取、道具使用、移动、聊天

c.聊天性能测试

广播聊天是最为考验游戏信息发送能力的功能。通过进行全局广播的压力测试。我们可以获取服务器进程发送信息到客户端的最高承载量。进而可以对我们的各种广播功能进行一个预估和频率限制。

d.同屏玩家的移动测试

移动+广播。这两种信息,基本是网络游戏流量的70-80%左右。同屏玩家数量,将会增加各种数据的广播需求,非常影响游戏性能。所以同屏的移动测试也是广播测试的一个必要环节。需要根据实际结果进行适当的优化。

e.大量玩家同时登录测试

玩家登录时,有大量的信息需要进行分配和初始化;同时也有大量的数据需要下传客户端。服务器需要进行大量的TCP连接建立。所以是一个比较关键的过程。这个测试案例是一个比较特殊,但是运营是肯定会碰到的案例。

f.由于线程池处理事务,随着事务的时耗,存在一个最优线程数的问题。过多的线程反而会降低服务器效率

3.细节问题

a.进行测试需要仔细思考客户端性能影响服务器最后表现的可能性。比如

a1.模拟客户端的性能无法有效处理服务器返回信息,可能就导致服务器发送的信息缓存在服务器系统缓存,从而表现出服务器内存不断增加。表现为服务器发送能力不足,其实可能根本就是客户端的性能问题

a2.客户端性能问题,导致发起的请求数过少,从而导致单位时间内服务器处理的请求过少。表现为服务器性能不足,其实根本就是客户端的请求能力不足。

b.网络带宽导致最后表现不足

b1.确认服务器的各个网卡,以及相互的带宽。不然可能因为相互带宽,导致服务器对于客户端请求的处理延时。表现为服务器卡机

b2.客户端模拟多个玩家,比如1000个玩家。而客户端的网卡或者客户端与服务器之间的中转服务器带宽过小,导致服务器数据发送不出,内存不断增加。表现为服务器发送能力不足,其实是中间带宽问题。

c.debug i/o导致服务器性能下降

c1.进行性能测试,一定要取消debug用的同步的i/o.比如我们服务器的debuginternalLog.同步i/o是非常影响性能的,特别在压力测试下可能导致每秒上千上万甚至几十万次的执行。一处的文件写入操作就可以导致几十万次的处理能力变成几千次的处理能力。

c2.客户端避免进行阻塞操作导致模拟多用户性能下降,导致服务器表现性能下降

d.流量需要区分内网网

内、外网流量在游戏正式运行时是完全分开的。价格也是完全不同的。一个千M的外网是一个无法想象的运营成本,而kmbps/s现在已经是一个可以接受的代价。游戏进程需要进行不同网卡的配置和绑定。确定内外网流量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值