性能测试、负载测试和压力测试的关系是什么?
效率作为ISO 9126内部和外部质量的重要质量属性之一,其含义是在规定条件下,相对于所用的资源的数量,软件产品可提供适当性能的能力。资源可能包括其他软件产品或系统的软件和硬件配置,以及其他相关的资源(例如:打印纸、磁盘等)。
效率测试主要关注产品的时间和资源相关的特性。时间相关的特性是指在规定条件下,软件产品执行其功能时,提供适当的响应和处理时间以及吞吐量的能力,例如:用户打开某个网页需要等待的时间;资源相关的特性是指,在规定条件下,软件产品执行其功能时,使用合适数量和类别的资源的能力,例如:用户在进行相关操作时,系统的内存和CPU的变化情况。
根据产品的时间特性和资源特性,效率测试可以包括不同的测试类型,例如:性能测试(Performance Test)、负载测试(Load Test)和压力测试(Stress Test)。这三种效率测试类型,不仅在具体定义上面有不同的侧重点,同时相互之间又是密切关联的。
1)性能测试
性能测试主要评价系统或组件的性能是否和具体的性能需求一致,例如:对访问速度的性能需求或对内存使用情况的需求。特定性能测试的关注点在于组件或系统在规定的时间内和特定的条件下响应用户或系统输入的能力。
不同的性能的度量方法取决于不同的被测对象。对于一个单独软件组件,其性能可以根据CPU主频来判定。而带客户端的系统,其性能则要根据系统处理特定用户请求的响应时间来判定。对于那些由多种组件(如客户端、服务器、数据库)构成的系统,则要进行各组件之间的性能测试。
产品的性能对用户是否会持续使用该产品影响很大。表1所示是一个用户对访问一个独立页面时等待不同时间的态度分布。可以看到,当页面加载时间在10秒的时候,有84%的用户愿意等待;但是当页面加载时间达到30秒的时候,只有5%的用户愿意等待。
表1 用户愿意等待时间分布
表1中的数据考虑了网络的延迟。而如果在测试环境中,整个网络是被测试系统所独占的时候,对系统性能的要求要高的多。对于愿意等待的时间,每个用户的承受范围是不同,而且用户对不同的应用程序愿意接受的等待时间也是不一样的。下面是一组关于响应时间的性能需求描述:
- 对于多媒体交互系统,在90%的时间内系统响应时间应该不超过0.1秒;
- 对于每个用户同时只有一项任务的在线系统,在90%的时间内系统响应时间应该不超过0.5秒;
- 对于每个用户同时有多任务的在线系统,在90%的时间内系统响应时间应该不超过1秒。
性能测试关注的是系统性能是否和具体的性能需求相一致,而当系统性能超过性能需求的时候,系统的表现并不是测试人员关心的重点。
例如:性能需求中要求系统应该支持最大同时在线用户为5000个,那么在性能测试过程中重点测试系统是否能支持5000个用户同时在线;当有5000个用户同时在线后,性能测试需要关注整个系统的运行是否符合要求;而对于在线用户超过5000人的时候,系统的表现行为并不是性能测试需要关注的。
2)负载测试
负载测试是一种通过增加负载来评估组件或系统的性能的测试方法。例如:通过增加并发用户数和(或)事务数量来测量组件或系统能够承受的负载。负载测试和性能测试的主要区别在于负载测试时,系统负载是逐渐增加的,而不是一步到位,负载测试需要观察系统在各种不同的负载情况下是否都能够正常工作。
下图是某网站随着用户数量的增加,对应的响应时间也在增加的趋势图。具体趋势如图1所示。
图1 某网站负载测试中用户数量和响应时间关系图
通过观察图1,可以发现随着用户数目的增加,系统响应时间也跟着增加。当在线用户数到700以后,系统响应时间增速明显加快。当然响应时间只是需要观察的数据之一,随着测试负载的增加还需要观察系统资源等占有情况。
3)压力测试
压力测试是评估系统处于或超过预期负载时系统的运行情况。压力测试的关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。在压力级别逐渐增加时,系统性能应该按照预期缓慢下降,但是不应该崩溃。压力测试还可以发现系统崩溃的临界点,从而发现系统中的薄弱环节。
例如:系统最大支持的同时在线用户数是1000个,压力测试需要测试在1000个用户甚至2000个用户同时在线时系统的表现。虽然测试时负载已经超过了系统的设计能力,但是在这种情况下被测试系统也不应该发生崩溃。压力测试也可以针对系统资源进行测试,例如:在系统内存耗尽情况下,测试系统的运行情况,这种情况下被测试系统也不应该崩溃。
前面分别介绍了性能测试、负载测试和压力测试三种效率测试类型。目前在软件测试领域,对这三种测试类型的定义并不统一。在实际的测试工作中,性能测试这个词被广泛的使用。在很多场合,性能测试是上述三种测试类型的通称;在有的书籍或者参考资料中,性能测试的范围甚至更加广泛。
Chrome浏览器强制http重定向到https的简单方法
下面是步骤:
- 地址栏输入chrome://net-internals/
- 在HSTS的标签栏里Domain里填上需要访问的domain,比如twitter.com
- 然后选中Include subdomains点击Add按钮即可,可以加多个域
- 这样所有访问这个域名(包括子域名)都自动转到https了
开发CXF客户端通过HTTP Basic Authorization 安全认证的几种办法
开发CXF客户端通过HTTP Basic Authorization 安全认证的几种办法,有很多个,但是网上包括英文stackoverflow网站和官方文档全部是错误的。一般的CXF客户端开发方法是首先通过网络获取WSDL文件,然后再发送验证用户名密码调用服务,然而在客户端声明并创建服务实例的时候,如
HelloWorldService ss = new HelloWorldService(wsdlURL, SERVICE_NAME);
就无法通过Http basic 验证,所以之后的所有用户名和密码设置全部失效。
下面贴出几种CXF客户端通过HTTP Basic Authorization 安全认证的方法代码:
private static final QName SERVICE_NAME = new QName("http://example.org/", "HelloWorldService");
private HelloWorld_HelloWorldPort_Client() {
}
public static void main(String args[]) throws java.lang.Exception {
URL wsdlURL = HelloWorldService.WSDL_LOCATION;
if (args.length > 0 && args[0] != null && !"".equals(args[0])) {
File wsdlFile = new File(args[0]);
try {
if (wsdlFile.exists()) {
wsdlURL = wsdlFile.toURI().toURL();
} else {
wsdlURL = new URL(args[0]);
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
System.setProperty( "proxySet", "true" );
System.setProperty( "http.proxyHost", "10.133.96.245" );
System.setProperty( "http.proxyPort", "8080" );
//very important!!!
wsdlURL=new File("D:/hello.xml").toURI().toURL();
HelloWorldService ss = new HelloWorldService(wsdlURL, SERVICE_NAME);//如果wsdlURL是来自HTTP的网络,则此处无法通过Http Basic 验证,已经出错
HelloWorld port = ss.getHelloWorldPort();
//1、使用本地wsdl文件,而不是从网络中获取wsdl,则可以正常工作
// Service service = Service.create(wsdlURL, SERVICE_NAME);
// HelloWorld port = (HelloWorld) service.getPort(HelloWorld.class);
// BindingProvider bp=(BindingProvider)port;
// bp.getRequestContext().put(
// BindingProvider.USERNAME_PROPERTY, "ross");
// bp.getRequestContext().put(
// BindingProvider.PASSWORD_PROPERTY, "ross");
//2、以下可正常工作
// JaxWsProxyFactoryBean clientFactory = new JaxWsProxyFactoryBean();
// clientFactory.setAddress("http://localhost:8081/hello");
// clientFactory.setServiceClass(HelloWorld.class);
// clientFactory.setUsername("ross");
// clientFactory.setPassword("ross");
// HelloWorld port = (HelloWorld)clientFactory.create();
//end
//3、使用本地wsdl文件,而不是从网络中获取wsdl,则可以正常工作
// Client client = ClientProxy.getClient(port);
// HTTPConduit http = (HTTPConduit) client.getConduit();
// AuthorizationPolicy authorizationPolicy = new AuthorizationPolicy();
// authorizationPolicy.setUserName("ross");
// authorizationPolicy.setPassword("ross");
// authorizationPolicy.setAuthorizationType("Basic");
// http.setAuthorization(authorizationPolicy);
//end
//4、使用本地wsdl文件,而不是从网络中获取wsdl,则可以正常工作
// Map<String, List<String>> headers = new HashMap<String, List<String>>();
// headers.put("Authorization", Arrays.asList("Basic cm9zczpyb3Nz"));
// Client client = ClientProxy.getClient(port);
// client.getRequestContext().put(Message.PROTOCOL_HEADERS, headers);
//end
//5、使用本地wsdl文件,而不是从网络中获取wsdl,则可以正常工作
Client client = ClientProxy.getClient(port);
HTTPConduit http =
(HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setAutoRedirect(true);
http.setClient(httpClientPolicy);
http.setAuthSupplier(
new MyBasicAuthSupplier("mule-realm", "ross", "ross"));
//end
// Okay, are you sick of configuration files ?
// This will show you how to configure the http conduit dynamically
// Client client = ClientProxy.getClient(port);
// HTTPConduit http = (HTTPConduit) client.getConduit();
// HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
// httpClientPolicy.setConnectionTimeout(36000);
// httpClientPolicy.setAllowChunking(false);
// httpClientPolicy.setReceiveTimeout(32000);
// httpClientPolicy.setConnection(ConnectionType.CLOSE);
// http.setClient(httpClientPolicy);
{
System.out.println("Invoking sayHi...");
java.lang.String _sayHi_arg0 = "";
java.lang.String _sayHi__return = port.sayHi(_sayHi_arg0);
System.out.println("sayHi.result=" + _sayHi__return);
}
System.exit(0);
}
低密度脂蛋白胆固醇偏高怎么办?
低密度脂蛋白偏高对心脑血管不利。要注意控制饮食,戒烟戒酒,少吃油腻,多吃青菜,吃饭七成饱。饭后一小时活动,微出汗,半上午或半下午可吃点水果。坚持下去,就会正常的。
多吃豆制品和少量饮葡萄酒(一天不超过100毫升)可增加高密度脂蛋白胆固醇水平。大量饮酒极易由于热能过剩而肥胖,同时肝内合成甘油三酯量增加,极低密度脂蛋白胆固醇分泌也增多,反而造成高脂血症。
要戒酒,低脂饮食(少吃肥肉及油炸食品),多运动,总胆固醇高会导致动脉粥样硬化,引起高血压\冠心病\ 脂肪肝, 找医生开点,降脂药.高血脂是指血中胆固醇(TC)和/或甘油三酯(TG)过高或高密度脂蛋白胆固醇(HDL-C)过低,现代医学称之为血脂异常。
附:
高脂肪,高胆固醇食物:
纯糖、巧克力、糖果、甜点、冰淇淋、甜饮料、花生、松籽、蜂蜜、肥肉、黄油、奶油、内脏、动物脑、鱼籽、动物油脂等
Database Systems: Why is it hard to scale a database, in layman's terms? - Quora
为什么数据库难以扩展具备高伸缩性?
The real-world analog here is that databases are often stored on hard drives, and hard drives are of finite space, and you can only pack so many hard drives on a computer (in a data center, on a rack). Data centers are now very, very large in order to contend with this common problem but if you are an extremely voluminous library, you may exceed this constraint, and overflow your data center rack's ability to hold hard drives, or even your entire data center and need a new one (rare). Still, the point is that no matter how much room you start off with, you may exceed it, and you may not be able to linearly keep adding more "units" of room (i.e. shelves in the same building) and you might have to take some sort of step jump, like leasing another building or renting another rack or building another datacenter.


