http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html
http://blog.csdn.net/wgyscsf/article/details/54783101?winzoom=1
推荐下我用着觉得不错的:Toad:在 Mac App Store 上的内容**免费,可以直接在AppStore下载,支持:Oracle,PostgreSQL,MySQL,MongoDB
DBeaver:http://dbeaver.jkiss.org/**Github开源,免费;支持主流操作系统:Windows,Linux,Mac OS X,Solaris支持所有流行的数据: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, Teradata, MongoDB, Cassandra, Redis, etc.
作者:CorningSun链接:https://www.zhihu.com/question/20498949/answer/140156456来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
########################################################################
http://www.cnblogs.com/wangcp-2014/p/6060019.html
http://www.cnblogs.com/star91/p/5059222.html
一、经典公式1:
一般来说,利用以下经验公式进行估算系统的平均并发用户数和峰值数据
1)平均并发用户数为 C = nL/T
2)并发用户数峰值 C‘ = C + 3*根号C
C是平均并发用户数,n是login session的数量,L是login session的平均长度,T是值考察的时间长度
C’是并发用户数峰值
举例1,假设系统A,该系统有3000个用户,平均每天大概有400个用户要访问该系统(可以从系统日志从获得),对于一个典型用户来说,一天之内用户从登陆到退出的平均时间为4小时,而在一天之内,用户只有在8小时之内会使用该系统。
那么,
平均并发用户数为:C = 4004/8 = 200
并发用户数峰值为:C‘ = 200 + 3根号200 = 243
举例2, 某公司为其170000名员工设计了一个薪酬系统,员工可进入该系统查询自己的薪酬信息,但并不是每个人都会用这个系统,假设只有50%的人会定期用该系统,这些人里面有70%是在每个月的最后一周使用一次该系统,且平均使用系统时间为5分钟。
则一个月最后一周的平均并发用户数为(朝九晚五):
n = 1700000.50.7/5 = 11900
C= 11900*5/60/8 = 124
吞吐量计算为:F = Vu * R / T 单位为个/s
F为事务吞吐量,Vu为虚拟用户数个数,R为每个虚拟用户发出的请求数,T为处理这些请求所花费的时间
二、通用公式2:
对绝大多数场景,我们用(用户总量/统计时间)影响因子(一般为3)来进行估算并发量。
比如,以乘坐地铁为例子,每天乘坐人数为5万人次,每天早高峰是7到9点,晚高峰是6到7点,根据8/2原则,80%的乘客会在高峰期间乘坐地铁,则每秒到达地铁检票口的人数为5000080%/(36060)=3.7,约4人/S,考虑到安检,入口关闭等因素,实际堆积在检票口的人数肯定比这个要大,假定每个人需要3秒才能进站,那实际并发应为4人/s*3s=12,当然影响因子可以根据实际情况增大!
三、根据PV计算公式:
比如一个网站,每天的PV大概1000w,根据2/8原则,我们可以认为这1000w pv的80%是在一天的9个小时内完成的(人的精力有限),那么TPS为:
1000w80%/(93600)=246.92个/s,取经验因子3,则并发量应为:
246.92*3=740
四、根据TPS估计:
公式为 C = (Think time + 1)*TPS
五、根据系统用户数计算:
并发用户数 = 系统最大在线用户数的8%到12%
######################################################################
###################################################################################
新产品自动化测试方案和计划 Test Plan
01
梳理新产品自动化的核心业务模块和一些数据业务 包括夜审 价格算法 和房量算法
02
使用SQL语句和业务脑图 梳理清楚 核心模块的 业务流程用例
03
使用Python SQL 开发和实现 业务核心的自动化 用例
04
05
使用自动化 用例 集成CI Jenkins 对核心业务进行验证
JMeter 核心接口压力测试 压测
################################################################################### 日志测试SQL语句##############
use log_dev database, change your table name and timestamp day value, and excute it **
select log_cd,func_cd,log_dhms from log_operate_1709 where created_date >= to_timestamp('2017-09-11', 'yyyy-mm-dd')****and log_cd <> '日志类型' order BY created_date DESC;****select log_cd,func_cd,log_dhms,infurl,infnm from log_pdt_data_1709 where created_date >= to_timestamp('2017-09-11', 'yyyy-mm-dd')****and log_cd <> '日志类型' ORDER BY created_date DESC;
--testing log SQL statementsselect log_cd,func_cd,log_dhms,from_ip from log_operate_1709 where created_date >= to_timestamp('2017-09-14', 'yyyy-mm-dd')and log_cd <> '日志类型' order BY created_date DESC;select log_cd,func_cd,log_dhms,infurl,infnm,from_ip from log_pdt_data_1709 where created_date >= to_timestamp('2017-09-14', 'yyyy-mm-dd')and log_cd <> '日志类型' ORDER BY created_date DESC;--count log_operate_1709 and log_pdt_data_1709 tables current date record select count(log_cd) from log_operate_1709 where log_cd <> '日志类型' and created_date >= to_timestamp('2017-09-14', 'yyyy-mm-dd');select count(log_cd) from log_pdt_data_1709 where log_cd <> '日志类型' and created_date >= to_timestamp('2017-09-14', 'yyyy-mm-dd');
#################################################################################################################
白盒测试 需求用例 名词解释 houseblock锁房 RT+ 只改房含 RT 不管改不改房含 只要改了房价 noshow 预定未到 结账folio 就是结账账单-已结账下面 下个+下面的****001.房价=====================================================每日房价记录数与住店时间一致houseblock记录数与住店时间一致每日收取的房含要出现在每日房含表中的每一天,首日房含只能出现在首日一期所有每日房价的价格代码、折扣一样RT+只能有一套房含RT只能有一套房含,且每日价格设定一样
002.预订=====================================================没有来期大于等于今日的noshow账户没有离期小于今日的在店账户没有来期小于今日的预订账户没有来期大于今日的在店账户每个账户至少有一个住店客人,且账户表里的住店客人ID对应的存在每个账户只能有一个预订人,且账户表里的预订人ID对应的存在
003.账务====================================================客账交易金额与账务明细金额一致,12个细项金额也一致账单的余额为0已结账户余额为0结账folio里的几个金额与明细一致转账folio里的几个金额与明细一致
004.客房====================================================空房态没有在店账户占用房态必有在店账户维修房态有对应的维修记录
houseblock
###################################################################
白盒测试 by 20170622****房价 housingprice_test001 housingprice_test002 housingprice_test003
1.每日房价记录数与住店时间一致
SELECT country, SUM( CASE WHEN sex = '1' THEN population ELSE 0 END), --男性人口 SUM( CASE WHEN sex = '2' THEN population ELSE 0 END) --女性人口 FROM Table_A GROUP BY country
2.houseblock记录数与住店时间一致
select * from emp where empno=7369 for update;
3.每日收取的房含要出现在每日房含表中的每一天,首日房含只能出现在首日
select * from emp where empno=7369 for update;
4.一期所有每日房价的价格代码、折扣一样
select * from emp where empno=7369 for update;
5.RT+只能有一套房含
select * from emp where empno=7369 for update;
6.RT*只能有一套房含,且每日价格设定一样
select * from emp where empno=7369 for update;
7.每日房含12个分项的合计与每日房价的一致
select * from emp where empno=7369 for update;
预订 reserve_test001 reserve_test002
1.没有来期大于等于今日的noshow账户
SELECT arr_dt,dpt_dt,acct_no,resv_no FROM rsv_account WHERE acct_stus='NSW' AND arr_dt>今日
2.没有离期小于今日的在店账户
SELECT arr_dt,dpt_dt,acct_no,resv_no FROM rsv_account WHERE acct_stus='STY' AND dpt_dt<今日
3.没有来期小于今日的预订账户
SELECT arr_dt,dpt_dt,acct_no,resv_no FROM rsv_account WHERE acct_stus='RSV' AND arr_dt<今日
4.没有来期大于今日的在店账户
SELECT arr_dt,dpt_dt,acct_no,resv_no FROM rsv_account WHERE acct_stus='STY' AND arr_dt>今日
5.每个账户至少有一个住店客人,且账户表里的住店客人ID对应的存在
SELECT resv_no,acct_no,acct_stus FROM rsv_account WHERE acct_stus IN ('RSV','STY','WAT') AND resv_no NOT IN ( SELECT DISTINCT(M.resv_no) FROM rsv_account M INNER JOIN rsv_account_guest D ON M.resv_no=D.resv_no AND M.acct_no=D.acct_no WHERE acct_stus IN ('RSV','STY','WAT') AND guest_flg='RE' ORDER BY M.resv_no)
6.每个账户只能有一个预订人,且账户表里的预订人ID对应的存在
(SELECT guest_id FROM rsv_account m INNER JOIN rsv_account_guest d ON m.resv_no=d.resv_no AND m.bkguest_id=d.guest_id WHERE acct_stus IN ('RSV','STY','WAT') AND guest_flg='BK' ORDER BY m.resv_no,d.acct_no)
SELECT acct_stus,resv_no,acct_no FROM rsv_account WHERE acct_stus IN ('RSV','STY','WAT') AND acct_no IN ( SELECT d.acct_no FROM rsv_account m INNER JOIN rsv_account_guest d ON m.resv_no=d.resv_no AND m.acct_no=d.acct_no WHERE acct_stus IN ('RSV','STY','WAT') AND guest_flg='BK' GROUP BY d.acct_no HAVING COUNT(*)>1)
账务 financial_test001 financial_test002
1.客账交易金额与账务明细金额一致,12个细项金额也一致
金额一致:
SELECT * from (SELECT mtrn_id,SUM(trntot_amt) as amt1 FROM hpt_fin_transaction GROUP BY mtrn_id) A, (SELECT trn_id,SUM(trn_amt) as amt2 FROM hpt_fin_transaction_jrnl WHERE jrnl_typ='REVN' GROUP BY trn_id) B WHERE A.mtrn_id=B.trn_id AND amt1<>amt2
细项一致:
SELECT * FROM (SELECT mtrn_id,acct_no,room_num,trn_cd,trn_drpt,trntot_amt AS amt1,trn_net+trn_tax1+trn_tax2+trn_tax3+trn_tax4+trn_tax5+trnsvc_net+trnsvc_tax1+trnsvc_tax2+trnsvc_tax3+trnsvc_tax4+trnsvc_tax5 AS amt2 FROM hpt_fin_transaction) A WHERE A.amt1<>A.amt2
2.账单的余额为0
SELECT acct_no,bill_no,SUM(trntot_amt) from hpt_fin_transaction WHERE COALESCE(bill_no,'')<>'' GROUP BY acct_no,bill_no HAVING SUM(trntot_amt)>0 ORDER BY acct_no
3.已结账户余额为0
SELECT a.acct_no,SUM(trntot_amt) from rsv_account a LEFT JOIN hpt_fin_transaction t ON a.acct_no=t.acct_no WHERE a.acct_stus='OUT' GROUP BY a.acct_no HAVING SUM(trntot_amt)>0
4.结账folio里的几个金额与明细一致
SELECT F.acct_no,F.folio_no,credit_amt,debit_amt,check_amt,T.acct_no,T.bill_no,T.normal,trnamt FROM hpt_fin_folio F LEFT JOIN (SELECT acct_no,bill_no,normal,sum(trntot_amt) AS trnamt FROM hpt_fin_transaction WHERE bill_no<>'' GROUP BY acct_no,bill_no,normal ORDER BY acct_no,bill_no) T ON F.acct_no=T.acct_no AND F.folio_no=T.bill_no WHERE F.folio_typ='BILL' AND COALESCE(credit_amt,0)<>COALESCE(debit_amt,0) OR CASE T.normal WHEN 'C' THEN COALESCE(debit_amt,0)<>trnamt WHEN 'D' THEN COALESCE(credit_amt,0)<>trnamt ELSE 1=1 END
5.转账folio里的几个金额与明细一致
SELECT F.acct_no,F.folio_typ,F.folio_no,credit_amt,debit_amt,check_amt,J.trn_amt from hpt_fin_folio F LEFT JOIN (SELECT acct_no,pkgfolio_no,sum(trn_amt) AS trn_amt FROM hpt_fin_transaction_jrnl WHERE jrnl_typ='MOVE' GROUP BY acct_no,pkgfolio_no ORDER BY acct_no,pkgfolio_no) J ON F.acct_no=J.acct_no AND F.folio_no=J.pkgfolio_no WHERE F.folio_typ='MVIN' OR F.folio_typ='MVOUT' AND (COALESCE(credit_amt,0)+COALESCE(debit_amt,0)<>COALESCE(check_amt,0) OR COALESCE(check_amt,0)<>COALESCE(trn_amt,0))
SELECT F.acct_no,F.folio_typ,F.folio_no,credit_amt,debit_amt,check_amt,J.normal,J.trn_amt from hpt_fin_folio F LEFT JOIN (SELECT acct_no,pkgfolio_no,normal,sum(trn_amt) AS trn_amt FROM hpt_fin_transaction_jrnl WHERE jrnl_typ='MOVE' GROUP BY acct_no,pkgfolio_no,normal ORDER BY acct_no,pkgfolio_no,normal) J ON F.acct_no=J.acct_no AND F.folio_no=J.pkgfolio_no WHERE F.folio_typ='MVIN' OR F.folio_typ='MVOUT' AND CASE J.normal WHEN 'C' THEN COALESCE(credit_amt,0)<>J.trn_amt WHEN 'D' THEN COALESCE(debit_amt,0)<>J.trn_amt ELSE 1=1 END
客房 hotelroom_test001 hotelroom_test002
1.空房态没有在店账户
SELECT arr_dt,dpt_dt,resv_no,acct_no,room_num FROM rsv_account WHERE acct_stus='STY' AND room_num IN (SELECT room_num FROM hpt_hk_room WHERE fo_room_stus='V')
2.占用房态必有在店账户
SELECT arr_dt,dpt_dt,resv_no,acct_no,room_num FROM rsv_account WHERE acct_stus='STY' AND room_num IN (SELECT room_num FROM hpt_hk_room WHERE fo_room_stus<>'O')
3.维修房态有对应的维修记录
SELECT room_num FROM hpt_hk_room WHERE room_stus='OOO' AND room_num NOT IN (SELECT room_num FROM hpt_hk_room_repair WHERE repair_typ='OOO' AND start_dt<=当日 AND end_dt>=当日)
PMS Clean SQL Statements
####################delete clean all data################
delete from grp_crm_corp;
delete from grp_crm_corp_address;
delete from grp_crm_corp_blacklist;
delete from grp_crm_corp_contact;
delete from grp_crm_corp_contactway;
delete from grp_crm_corp_contract;
delete from grp_crm_corp_manageunit;
delete from grp_crm_corp_notice;
=====================================================delete from grp_crm_profile;
delete from grp_crm_profile_address;
delete from grp_crm_profile_blacklist;
delete from grp_crm_profile_certificate;
delete from grp_crm_profile_class;
delete from grp_crm_profile_company;
delete from grp_crm_profile_contactway;
delete from grp_crm_profile_notice;
#############################################################################################################
delete from hpt_fin_folio;
delete from hpt_fin_transaction;
delete from hpt_fin_transaction_jrnl;
delete from rsv_account;
delete from rsv_account_guest;
delete from rsv_account_package;
delete from rsv_account_package_price;
delete from rsv_account_rate;
delete from rsv_account_rate_copy;
delete from rsv_account_roomrequest;
delete from rsv_houseblock;
update hpt_hk_room set room_stus='V',clean_stus='C',fo_room_stus='V'
**悲观锁(Pessimistic Lock)/ **乐观锁(Optimistic Lock) : ******悲观锁(Pessimistic Lock) 每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。
乐观锁(Optimistic Lock):****每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的时候都不会进行加锁,但是在更新数据的时候需要判断该数据是否被别人修改过。如果数据被其他线程修改,则不进行数据更新,如果数据没有被其他线程修改,则进行数据更新。由于数据没有进行加锁,期间该数据可以被其他线程进行读写操作。 适用场景:
悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。
乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。
总结:两种所各有优缺点,读取频繁使用乐观锁,写入频繁使用悲观锁。houseblock
** 提交BUG主要 COVER 以下三方面BUG######################################################
前端功能BUG — pangtao 开BUG类型选择功能BUG
**后端借口BUG **** — zhaoxiang **开BUG类型选择接口BUG****
**UI设计BUG ** — yangxuelian **开BUG类型选择设计BUG******
################################################################################################这个文档主要是 jdk, eclipse/eclipse plugging,maven 和后端代码示例的配置和开发使用. owner is liubowen.
1.Install JDK Set env and Unzip eclipse and add pluggings
2 Tomcat and openexper plugging
3、按照培训资料配置eclipse中maven插件(maven本地库从 \192.168.20.200\cshispublic\刘博文\JAVA示例工程\ 中获取m2.rar,并解压)
4 import java priject to eclipse
- following Training and config projects
6、解压缩zookeeper-3.4.8.rar,并运行其中zookeeper-3.4.8\bin下的zkServer.cmd7、解压缩redis64-2.6.12.1.rar,并使用“redis-server.exe redis.conf”命令运行8、解压缩apache-tomcat-7.0.27.rar,按照培训在eclipse中配置相应tomcat插件,并运行9、若tomcat中配置的上下文为/jwBsWeb,则访问http://127.0.0.1:8080/jwBsWeb/login.do,登录名密码为admin\1
10 ,install and use git.