①選修成績(jī)表SCTS中,學(xué)生選修成績(jī)由平時(shí)成績(jī)(regular_grade)和考試成績(jī)(exam_grade)構(gòu)成課程總評(píng)成績(jī)(total_mark),公式為:total_mark= regular_grade*30%+ exam_grade*70%
設(shè)計(jì)DML觸發(fā)器,使得當(dāng)用戶修改某位學(xué)生選修某門課程的平時(shí)成績(jī)或者考試成績(jī)時(shí),自動(dòng)實(shí)現(xiàn)對(duì)該學(xué)生該門課程總評(píng)成績(jī)的更新。
Create trigger Tri_UPDATE_SCTS on SCTS after UPDATE AS BEGIN IF UPDATE(regular_grade)or UPDATE(exam_grade) BEGIN DECLARE @rgrade float; DECLARE @egrade float; select @rgrade=regular_grade,@egrade= exam_grade from inserted update SCTS set total_mark=0.3*@rgrade+0.7*@egrade from inserted where SCTS.studentid =inserted.studentid and SCTS.courseid=inserted.courseid and SCTS.teacherid =inserted.teacherid END END |
--測(cè)試觸發(fā)器
update Scts set regular_grade='100',exam_grade='100' where studentid='200520805403'and courseid='20224B0' and teacherid='080102' select *from scts where studentid='200520805403'and courseid='20224B0' and teacherid='080102' |
--2、②設(shè)計(jì)DML觸發(fā)器,使得當(dāng)某學(xué)生在一個(gè)學(xué)期中所選修的課程總學(xué)分超過20學(xué)分時(shí),自動(dòng)提示“你選修的總學(xué)分已達(dá)到最大值,不允許繼續(xù)選課!”的信息;
Create trigger Tri_IN_LIMIT_SCTS on SCTS after insert --注意這里AFTER是插入之后的 AS BEGIN BEGIN DECLARE @allcredit float; DECLARE @sid varchar(12); select @sid =inserted.studentid from inserted select @allcredit=sum(credit) from courses where courseid in( select courseid from scts where studentid=@sid ) if (@allcredit>20) begin Rollback Transaction print @allcredit print'你選修的總學(xué)分已達(dá)到最大值,不允許繼續(xù)選課!' end else print'選課成功' END END |
--測(cè)試觸發(fā)器
select sum(credit) '總分' from courses where courseid in( select courseid from scts where studentid='200520701201' ) insert into Scts(courseid,studentid,teacherid) values ('50103Q0','200520701201','080102'); select *from courses where courseid='10042B0' |
--3.設(shè)計(jì)DML觸發(fā)器限定:對(duì)于“專業(yè)”(COURSES.character,包括專業(yè)課、專業(yè)基礎(chǔ)、專業(yè)選修等)課程,只有該課程開課學(xué)院的學(xué)生才能選修,否則提示“不允許跨院選課!”的提示信息。
Create trigger Tri_INSERT_SCTS on SCTS after insert AS BEGIN DECLARE @stype varchar(10); DECLARE @collegeid varchar(5); if exists(select * from courses AS C where C.courseid in(select courseid from inserted ) and C.Character like '專業(yè)%') BEGIN select @collegeid=college from courses AS C where C.courseid in(select courseid from inserted ) if exists (select college from students AS S where S.studentid in(select studentid from inserted )and S.college=@collegeid) PRINT '選專業(yè)課成功' else BEGIN Rollback Transaction PRINT '不允許跨院選課!' END END ELSE PRINT '選修公共選修課成功' END |
--選修本學(xué)院專業(yè)課
insert into Scts(courseid,studentid,teacherid)
values ('20224B0','200520805403','080102');
--選修非本院專業(yè)課 終止
insert into Scts(courseid,studentid,teacherid)
values ('10019B5','200520805403','080102');
--選修公共選修課
insert into Scts(courseid,studentid,teacherid) values ('50095Q0','200520805403','080102'); select *from students where college='08' select *from colleges where collegeid='08' select *from courses where courseid in (select courseid from courses where character not like '專業(yè)%')and college ='08' select *from scts where studentid='200520805403' delete from scts where courseid='20224B0' and studentid='200520805403'; |
--4、設(shè)計(jì)DML觸發(fā)器以實(shí)現(xiàn)對(duì)敏感數(shù)據(jù)的自動(dòng)審計(jì):當(dāng)用戶在SCTS表中插入新記錄或者更新SCTS表中的regular_grade和exam_grade屬性列時(shí),自動(dòng)在成績(jī)變化表GRADE_LOG(student, course, teacher, regular_grade, exam_grade, username, userdate)中增加一條相應(yīng)記錄,以記錄當(dāng)前用戶對(duì)學(xué)生成績(jī)的操作。(system_user)
Create table GRADE_LOG( id int identity(1,1) primary key, student varchar(20) not null , course varchar(50) not null, teacher varchar(20) not null, regular_grade float , exam_grade float, username varchar(20) not null, userdate datetime not null, operator varchar(10) not null ) --select system_user getdate() Create trigger Tri_IN_U_SCTS on SCTS after INSERT,UPDATE AS BEGIN IF UPDATE(regular_grade)OR UPDATE(exam_grade)or (exists (select 1 from inserted) and not exists (select 1 from deleted)) BEGIN DECLARE @student varchar(20); DECLARE @course varchar(50); DECLARE @teacher varchar(20); DECLARE @rgrade float; DECLARE @egrade float; DECLARE @username varchar(20); DECLARE @date datetime; DECLARE @type varchar(10); select @type='update'; if exists (select 1 from inserted) and not exists (select 1 from deleted) select @type='insert'; select @student=sname from students where studentid in(select studentid from inserted ) select @course =cname from courses where courseid in (select courseid from inserted) select @teacher =tname from teachers where teacherid in (select teacherid from inserted) select @rgrade=regular_grade,@egrade=exam_grade from inserted select @username=system_user,@date=getdate(); insert into GRADE_LOG values(@student,@course,@teacher,@rgrade,@egrade,@username,@date,@type) END END select * from GRADE_LOG; |
--更新成績(jī)
update Scts
set regular_grade='100',exam_grade='20'
where studentid='200520805403'and courseid='20224B0' and teacherid='080102'
--只更新總成績(jī),不激活觸發(fā)器
update Scts
set total_mark='100'
where studentid='200520805403'and courseid='20224B0' and teacherid='080102'
--5、DDL觸發(fā)器,禁止用戶在Teaching數(shù)據(jù)庫中的修改表和刪除表操作。
CREATE TRIGGER TRI_Teaching_DDL ON database for alter_table,drop_table AS BEGIN print '不允許修改或刪除數(shù)據(jù)表!' Rollback Transaction END |
/* Runtime對(duì)象 該類并沒有提供構(gòu)造函數(shù)。 說明不可以new對(duì)象。那么會(huì)直接想到該類中的方法都是靜態(tài)的。 發(fā)現(xiàn)該類中還有非靜態(tài)方法。 說明該類肯定會(huì)提供了方法獲取本類對(duì)象。而且該方法是靜態(tài)的,并返回值類型是本類類型。 由這個(gè)特點(diǎn)可以看出該類使用了單例設(shè)計(jì)模式完成。 該方式是static Runtime getRuntime(); */ package com.fwj.reitheima; import java.io.IOException; public class RuntimeDemo { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //獲取Runtime類對(duì)象 Runtime r=Runtime.getRuntime(); //拿記事本軟件打開指定文件 Process p = r.exec("notepad.exe SystemDemo.java"); Thread.sleep(5000); p.destroy(); } } |
修改orcale里面的tnsnames.ora文件
1# tnsnames.ora Network Configuration File: F:\oracle\product\10.2.0\db_2\network\admin\tnsnames.ora # Generated by Oracle configuration tools. ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =222222)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) ) |
增加你要遠(yuǎn)程的地址:
112 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 2222222)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = www) ) ) |
通過perpare()方法和檢查字段防sql注入.
$pdo=new PDO('mysql:host=localhost;dbname=scms', 'root' ); $_POST=array('title'=>23,'content'=>'kmm'); $keys= array_keys($_POST); /** * $filetarr數(shù)組用于規(guī)定只可以寫入的字段 */ $filetarr=array('title','content'); $filtre=true; foreach ($keys as $value){ if(in_array($value, $filetarr,true)){ }else{ //var_dump($value); $filtre=false; break; } } if($filtre){ $fields=implode(',', $keys); $fieldszwh=':'.implode(',:', $keys); $sql="insert into article({$fields}) values({$fieldszwh})"; $pdostatement= $pdo->prepare($sql); $pdostatement->execute($_POST); var_dump($pdostatement->errorInfo()); }else{ echo '非法字段'; } |
2.萬能條件語句,同樣通過字段限制防注入
$pdo=new PDO('mysql:host=localhost;dbname=scms', 'root' ); $_POST=array('title'=>23,'content'=>'km'); $keys= array_keys($_POST); /** * $filetarr數(shù)組用于規(guī)定只可以寫入的字段 */ $filetarr=array('title','content'); $filtre=true; $where=''; /** *$wherearr數(shù)組用來根據(jù)字段指定查詢條件,例如大于,等于,like */ $wherearr=array('title'=>'like','content'=>'>%'); foreach ($keys as $value){ if(in_array($value, $filetarr,true)){ if($wherearr[$value]==='between'){ if(count(explode(',', $_POST[$value]))===1){ break; } $where.='and '.$value.' between '.":{$value}left".' and '.":{$value}right "; $_POST[$value]=explode(',', $_POST[$value]); $_POST[$value.'left']=$_POST[$value][0]; $_POST[$value.'right']=$_POST[$value][1]; unset($_POST[$value]); }else{ $where.='and '.$value.' '.$wherearr[$value].' '.":{$value} "; } }else{ //var_dump($value); $filtre=false; break; } } /** * *如果用or連接條件語句,截取前面兩個(gè)字符 */ $where=substr($where,3); if($filtre){ $fields=implode(',', $keys); $fieldszwh=':'.implode(',:', $keys); $sql="select * from article where {$where}"; var_dump($sql); $pdostatement= $pdo->prepare($sql); $pdostatement->execute($_POST); $re= $pdostatement->fetchAll(); var_dump($pdostatement->errorInfo()); var_dump($_POST); var_dump($re); }else{ echo '非法字段'; } |
概述:敏捷項(xiàng)目預(yù)想
測(cè)試計(jì)劃,測(cè)試創(chuàng)建和測(cè)試執(zhí)行在項(xiàng)目生命周期中貫穿始終。因此
單元測(cè)試的需要,尤其是自動(dòng)化單元測(cè)試不可忽略,而且應(yīng)當(dāng)作為整個(gè)團(tuán)隊(duì)的關(guān)鍵責(zé)任-而不僅僅是
軟件開發(fā)人員的責(zé)任。敏捷方法是建立在短期、可迭代并且可增長(zhǎng)發(fā)布版本,可以對(duì)變更有持續(xù)反饋和靈活應(yīng)對(duì)的基礎(chǔ)上的管理軟件開發(fā)的方法。起源于快速演變的商業(yè)環(huán)境,由于需要產(chǎn)品更快地完成改善和修改,敏捷方法推動(dòng)了能夠貫穿適用于整個(gè)應(yīng)用程序管理流程的組織結(jié)構(gòu)的速度質(zhì)量,應(yīng)對(duì)能力和適應(yīng)性。這篇
文章闡述了為什么
敏捷開發(fā)沒有單元測(cè)試不能有效地實(shí)施-尤其是沒有自動(dòng)化單元測(cè)試的時(shí)候。
代碼質(zhì)量的重要性
開發(fā)者早在數(shù)年前就知道越是到項(xiàng)目后期發(fā)現(xiàn)缺陷,修補(bǔ)缺陷的代價(jià)就越高。當(dāng)開發(fā)人員發(fā)現(xiàn)一個(gè)缺陷的時(shí)候,有時(shí)候需要幾分鐘來解決。如果在測(cè)試中將缺陷漏掉,然后被顧客發(fā)現(xiàn),圖1說明彌補(bǔ)代價(jià)會(huì)以幾何指數(shù)增長(zhǎng)。

......
客戶知道對(duì)每個(gè)發(fā)現(xiàn)的缺陷,他將失去寶貴的業(yè)務(wù)時(shí)間。開發(fā)者知道每個(gè)返回的缺陷意味著要花大量時(shí)間修復(fù)而不是鉆研新的功能特性。
敏捷方法做能
工作的軟件,并將其與初期反饋結(jié)合到一起。例如,初期系統(tǒng)發(fā)布可以獲取用戶對(duì)軟件運(yùn)行情況的反饋。為了給開發(fā)者信心,他們寫的代碼可以工作,單元測(cè)試提供了最快的質(zhì)量反饋。
缺陷發(fā)現(xiàn)越早,修復(fù)他們的代價(jià)就越低。因?yàn)槊艚莘椒ㄖС指哔|(zhì)量代碼,團(tuán)隊(duì)成員就應(yīng)當(dāng)多做單元測(cè)試。類似地,
自動(dòng)化測(cè)試讓開發(fā)者能夠在版本發(fā)布前重復(fù)多次地得到代碼質(zhì)量的反饋。
單元測(cè)試是什么?
單元測(cè)試是一種方法,這種方法將獨(dú)立的軟件單元,關(guān)聯(lián)的數(shù)據(jù)和使用步驟進(jìn)行測(cè)試,決定是否運(yùn)行正確。單元通常是一小片代碼,舉個(gè)例子,一個(gè)單獨(dú)的函數(shù)。單元測(cè)試就是一個(gè)簡(jiǎn)短的函數(shù),測(cè)試該單元的行為,給出一個(gè)成功/失敗的結(jié)果。這個(gè)通過用一個(gè)已知的單獨(dú)的正確值來測(cè)試函數(shù)完成。單元測(cè)試經(jīng)常使用模擬對(duì)象來預(yù)測(cè)式地模擬依賴行為。
本文收錄于《51測(cè)試天地》電子雜志第三十三期。
版權(quán)聲明:本文出自51Testing軟件
測(cè)試網(wǎng)電子雜志——《51測(cè)試天地》第三十三期。51Testing軟件測(cè)試網(wǎng)及相關(guān)內(nèi)容提供者擁有51testing.com內(nèi)容的全部版權(quán),未經(jīng)明確的書面許可,任何人或單位不得對(duì)本網(wǎng)站內(nèi)容復(fù)制、轉(zhuǎn)載或進(jìn)行鏡像,否則將追究法律責(zé)任。
在做
web測(cè)試時(shí),頁面上的HTML標(biāo)簽會(huì)包含各類事件:?jiǎn)螕簦╫nclick)、雙擊(onDblClick)、光標(biāo)聚集(OnBlur)、onchange、onfocus、onmousedown、onmouseup、onmouseover、onmouseout、onsubmit、onreset、onpropertychange等。
在用
QTP錄制時(shí),有可能會(huì)有一些事件錄制不到。這時(shí)候你可以進(jìn)行一些設(shè)置,QTP/tools/Web Event Recording Configuration/custom settings/event/add就可以添加你想要錄制下來的事件啦。
先描述一下我的問題,項(xiàng)目中碰到一個(gè)列表控件,是采用ligerUI做的,雙擊列表中的一行,會(huì)讀到這一行的內(nèi)容,然后把數(shù)據(jù)賦給頁面的其他標(biāo)簽,還包括一些隱藏域。
首先,我在錄制的時(shí)候發(fā)現(xiàn)雙擊事件錄不到(上述Web Event Recording Configuration已經(jīng)設(shè)置好),于是采用低級(jí)別錄制,雙擊事件順利錄制到。
接著,在回放的時(shí)候,發(fā)現(xiàn)雙擊事件失效,并沒有如預(yù)期中的,我雙擊一個(gè)項(xiàng),然后頁面別的元素獲取到他的值。
我的第一個(gè)操作是,因?yàn)橹勒麄€(gè)頁面實(shí)現(xiàn)的邏輯是,獲取到每一項(xiàng)的唯一標(biāo)志符后,把這個(gè)值賦給頁面的一個(gè)隱藏域,然后后續(xù)的
工作就都可以順利進(jìn)行了。因?yàn)檫@里涉及到隱藏域的問題,我們知道QTP采用的是對(duì)象識(shí)別的模式,意識(shí)就是,他只能識(shí)別他看的到的,在表面上顯示出來的對(duì)象。這里采用DOM對(duì)象的方法,DOM是直接從源代碼(HTML頁面)獲取對(duì)象。所以頁面上的各種隱藏域,各種可以通過標(biāo)簽、ID、屬性等獲取到的對(duì)象就可以很順利的在QTP中讀取到。DOM對(duì)象也很簡(jiǎn)單,只需要在你想要識(shí)別的對(duì)象的父對(duì)象后面加上“ .Object ”,然后就可以通過getElementById("id")、document.getElementById("id")、getElementsByName("html tag")等各種js獲取對(duì)象的方法來對(duì)頁面為所欲為了。
比如這里,我的實(shí)現(xiàn)代碼就變成了:
1 set obj = Browser("Browser").Page("Page").Object.getElementById("verifyID") 2 obj.value = "0101002699" |
這個(gè)只是很膚淺的解決了問題,但頁面上該顯示正確值的地方的值還是空的。那就是說還得弄一個(gè)能真正解決該問題的方法。
現(xiàn)在我們就引入了fireevent方法。
fireevent是JS中的一個(gè)方法,以下摘自MSDN的解釋
fireevent執(zhí)行的效果就是“等同于”在目標(biāo)元素上進(jìn)行了相關(guān)操作。可以模擬各種包括單擊在內(nèi)的,文章一開頭就列出來的各種操作。
那我上面遇到的問題的解決辦法就是:
Set list = Browser("Browser").Page("Page").WebElement("list").Object list.document.getElementById("maingrid4|2|r1001").fireevent("ondblclick") |
這樣,我想要的雙擊事件的回放問題,就順利解決啦。
web_reg_save_param取服務(wù)器返回的值,關(guān)聯(lián)服務(wù)器需要校驗(yàn)的值,不一定第動(dòng)態(tài)的,有可能不變,根據(jù)服務(wù)器的算法決定
關(guān)聯(lián)需要注意的項(xiàng):找到服務(wù)器的動(dòng)態(tài)的值;找到關(guān)聯(lián)值得左右邊界;關(guān)聯(lián)所放置的位置。
有時(shí)候需要使用的數(shù)據(jù)是服務(wù)器動(dòng)態(tài)產(chǎn)生的,但是錄制的時(shí)候是固定的,此時(shí)也也可以用關(guān)聯(lián)來處理。比如新增用例時(shí)TCID是服務(wù)器動(dòng)態(tài)產(chǎn)生的,此時(shí)需要使用關(guān)聯(lián)來獲取這個(gè)TCID的值。具體步驟如下:
1、找到需要關(guān)聯(lián)的地方,就是會(huì)使服務(wù)器產(chǎn)生動(dòng)態(tài)數(shù)據(jù)的這個(gè)提交。設(shè)置手工關(guān)聯(lián)必須在這個(gè)提交之前,這個(gè)位置必須設(shè)置正確,否則無法獲取關(guān)聯(lián)。比如下面的代碼:
web_set_max_html_param_len ("9999"); --函數(shù)可以自定義關(guān)聯(lián)返回值存放的參數(shù)的最大長(zhǎng)度,默認(rèn)是1024,如果不夠需要增加
web_reg_save_param("tcid","LB=input name=\"yl_tcid\" type=\"text\" value=\"","RB=\"",LAST); --設(shè)置關(guān)聯(lián),參數(shù)一為變量名,參數(shù)二為左邊界,參數(shù)三為右邊界
web_submit_data("TB_CeShiYLGL.aspx_2", --以下為一個(gè)客戶端提交函數(shù),上面的關(guān)聯(lián)函數(shù)就是為了獲取該提交后,服務(wù)器反饋的值。 "Action=http://192.168.3.99/tbasetest/CeShiYL/TB_CeShiYLGL.aspx?bz=1&GONGNENGID=MTE*", "Method=POST", "RecContentType=text/html", "Referer=http://192.168.3.99/tbasetest/CeShiYL/TB_CeShiYLGL.aspx?bz=1&GONGNENGID=MTE*", "Snapshot=t19.inf", "Mode=HTML", ITEMDATA, "Name=__EVENTTARGET", "Value=LB_Add", ENDITEM, "Name=__EVENTARGUMENT", "Value=", ENDITEM, "Name=__LASTFOCUS", "Value=", ENDITEM, "Name=__VIEWSTATE", "Value=/", ENDITEM, "Name=hdnYongLiGL", "Value=", ENDITEM, "Name=hdnDelRows", "Value=", ENDITEM, "Name=yl_tcid", "Value=1725", ENDITEM, "Name=yl_xm", "Value=1", ENDITEM, "Name=yl_xt", "Value=BAGL-1", ENDITEM, "Name=yxj", "Value=yl_gj", ENDITEM, "Name=yl_lyxq", "Value=", ENDITEM, "Name=yl_qzyl", "Value=", ENDITEM, "Name=yl_cjms", "Value=", ENDITEM, "Name=YuQiJG", "Value=%3CDisplayLayout%3E%3CStateChanges%3E%3C/StateChanges%3E%3C/DisplayLayout%3E", ENDITEM, "Name=yl_yyjgid", "Value=", ENDITEM, "Name=yl_yyjgidOrign", "Value=", ENDITEM, "Name=ylkhid", "Value=", ENDITEM, "Name=QuXiaoBZ", "Value=1", ENDITEM, "Name=_IG_CSS_LINKS_", "Value=", ENDITEM, LAST); lr_output_message("Value TCID = %s", lr_eval_string("{tcid}")); --輸出關(guān)聯(lián)的變量值 |
此時(shí)肯定會(huì)有一個(gè)疑問,我們?nèi)绾潍@取左右邊界的值。其實(shí)也比較簡(jiǎn)單,常見的方法見下圖
注意點(diǎn):
1、設(shè)置左右邊界時(shí),遇到的引號(hào)必須加轉(zhuǎn)義符號(hào)
2、自定義關(guān)聯(lián)返回值存放的參數(shù)的最大長(zhǎng)度
3、注意關(guān)聯(lián)函數(shù)的位置
如何在當(dāng)前界面中查找第一個(gè)ListView中的帶有文本屬性為Apps的子控件。
UiObjectappItem=newUiObject(newUiSelector() .className(" android.widget.ListView").instance(1) .childSelector(newUiSelector().text("Apps"))); |
如何查找當(dāng)前顯示界面中的取消按鈕和確認(rèn)按鈕:
UiObjectcancelButton=newUiObject(newUiSelector().text("Cancel"));
UiObjectokButton=newUiObject(newUiSelector().text("OK"));
查找到的UiObject實(shí)例可以在其他
測(cè)試代碼中重用。需要注意的是:每次使用UiObject做操作的時(shí)候uiautomator都會(huì)在當(dāng)前屏幕重新查找該控件。
如下代碼uiautomator工具在當(dāng)前界面查找文本內(nèi)容為“OK”的控件。如果存在并且可用則模擬用戶點(diǎn)擊該控件。
if(okButton.exists()&&okButton.isEnabled()) { okButton.click(); } |
還可以限制僅僅查找特定類型的控件。例如如下代碼只查找文本為“Cancel”和“OK”的android.widget.Button類型控件。
UiObjectcancelButton=newUiObject(newUiSelector().text("Cancel") .className("android.widget.Button")); UiObjectokButton=newUiObject(newUiSelector().text("OK") .className("android.widget.Button")); UiCollection |
代表控件的集合。獲取UiCollection的方式和UiObject一樣,通過UiSelector查找。UiCollection對(duì)應(yīng)Android系統(tǒng)中的ViewGroup以及子控件。
如下代碼演示如何通過UiSelector來獲取包含視頻集合的UiCollection。
UiCollectionvideos=newUiCollection(newUiSelector()
.className("android.widget.FrameLayout"));
如果每個(gè)視頻是放到LinearLayout中的,則可以通過如下方式獲取視頻的數(shù)目:
intcount=videos.getChildCount(newUiSelector()
.className("android.widget.LinearLayout"));
如果需要查找標(biāo)簽為“CuteBabyLaughing”的視頻,并點(diǎn)擊。則可以通過如下方式:
UiObjectvideo=videos.getChildByText(newUiSelector() .className("android.widget.LinearLayout"),"CuteBabyLaughing"); video.click(); |
同樣還可以模擬其他用戶操作。例如,模擬選擇視頻的操作如下:
UiObjectcheckBox=video.getChild(newUiSelector() .className("android.widget.Checkbox")); if(!checkBox.isSelected())checkbox.click(); UiScrollable |
代表可滾動(dòng)的控件。可以用UiScrollable來模擬水平或者垂直滾動(dòng)的UI元素。如果需要操作的元素在屏幕外需要滾動(dòng)屏幕才能看到的情況下需要使用UiScrollable。
例如,下面的代碼顯示了如何模擬滾動(dòng)到“Settings”菜單并點(diǎn)擊“Abouttablet”菜單的操作。
UiScrollablesettingsItem=newUiScrollable(newUiSelector() .className("android.widget.ListView")); UiObjectabout=settingsItem.getChildByText(newUiSelector() .className("android.widget.LinearLayout"),"Abouttablet"); about.click() |
1、應(yīng)用程序功能是否都實(shí)現(xiàn)
2、給用戶的提示信息是否簡(jiǎn)單、易于理解,且符合當(dāng)前事件
3、交互性事件的影響:
(1)硬件:USB插拔、電池沒電及插拔;
(2)軟件:電話來電、短信、QQ,音樂盒等后臺(tái)運(yùn)行的軟件。
4、網(wǎng)絡(luò)影響:wifi、2G/3G/4G
5、非法操作對(duì)應(yīng)用程序的影響
一、登錄
1、wifi對(duì)登錄的影響
2、數(shù)字、字母、特殊字符、漢字在登錄輸入框中的響應(yīng)
3、被刪除的用戶能否登錄成功
4、被禁止的用戶能否登錄成功
5、不存在的用戶能否登錄成功
二、下載
1、wifi正常,下載資源期間,賬號(hào)退出/切換的影響
2、wifi正常,下載資源期間,暫停、取消的使用
3、wifi正常,下載選擇的切換
4、wifi正常,賬號(hào)A的資源下載選擇后臺(tái)下載,賬號(hào)B登錄共同下載相同的資源,是否發(fā)生異常
5、wifi正常,后臺(tái)有資源正在下載(不同賬號(hào)或同一個(gè)賬號(hào)),使用“一鍵清理”是否能清除完全
6、資源正在下載過程中,wifi斷開,下載給出的響應(yīng),連接wifi之后能否繼續(xù)下載當(dāng)前資源
7、資源正在下載過程中,切換wifi賬號(hào),對(duì)下載的影響
8、wifi正常,彈出下載對(duì)話框,斷開wifi,點(diǎn)擊下載,應(yīng)用給出的響應(yīng),以及連接wifi之后,是否能下載成功。
9、wifi正常,下載隊(duì)列中的資源下載完成之后是否自動(dòng)繼續(xù)等待隊(duì)列中資源的下載
10、下載數(shù)據(jù)能否查看,且內(nèi)容是否完整
11、刪除本地緩存的下載文件,再次點(diǎn)擊下載,是否能下載成功
12、
手機(jī)內(nèi)存已滿時(shí),下載開始或中途是否有相應(yīng)的提示信息
13、下載過程中沒電關(guān)機(jī)、USB的插拔,突然關(guān)機(jī)對(duì)下載的影響
三、調(diào)查問卷
1、問卷內(nèi)容的布局、內(nèi)容顯示是否符合要求
2、手機(jī)HOME鍵、返回鍵、MENU鍵的響應(yīng)
3、暫存、交卷多次點(diǎn)擊的響應(yīng)
4、wifi對(duì)暫存和交卷的影響,緩存時(shí)間的長(zhǎng)短
1、請(qǐng)你自我介紹一下自己好嗎?
回答提示:一般人回答這個(gè)問題過于平常,只說姓名、年齡、愛好、
工作經(jīng)驗(yàn),這些在簡(jiǎn)歷上都有。其實(shí),企業(yè)最希望知道的是求職者能否勝任工作,包括:最強(qiáng)的技能、最深入研究的知識(shí)領(lǐng)域、個(gè)性中最積極的部分、做過的最成功的事,主要的成就等,這些都可以和
學(xué)習(xí)無關(guān),也可以和學(xué)習(xí)有關(guān),但要突出積極的個(gè)性和做事的能力,說得合情合理企業(yè)才會(huì)相信。企業(yè)很重視一個(gè)人的禮貌,求職者要尊重考官,在回答每個(gè)問題之后都說一句“謝謝”,企業(yè)喜歡有禮貌的求職者。
2、你覺得你個(gè)性上最大的優(yōu)點(diǎn)是什么?
回答提示:沉著冷靜、條理清楚、立場(chǎng)堅(jiān)定、頑強(qiáng)向上、樂于助人和關(guān)心他人、適應(yīng)能力和幽默感、樂觀和友愛。我在北大青鳥經(jīng)過一到兩年的培訓(xùn)及項(xiàng)目實(shí)戰(zhàn),加上實(shí)習(xí)工作,使我適合這份工作。
3、說說你最大的缺點(diǎn)?
回答提示:這個(gè)問題企業(yè)問的概率很大,通常不希望聽到直接回答的缺點(diǎn)是什么等,如果求職者說自己小心眼、愛忌妒人、非常懶、脾氣大、工作效率低,企業(yè)肯定不會(huì)錄用你。絕對(duì)不要自作聰明地回答“我最大的缺點(diǎn)是過于追求完美”,有的人以為這樣回答會(huì)顯得自己比較出色,但事實(shí)上,他已經(jīng)岌岌可危了。企業(yè)喜歡求職者從自己的優(yōu)點(diǎn)說起,中間加一些小缺點(diǎn),最后再把問題轉(zhuǎn)回到優(yōu)點(diǎn)上,突出優(yōu)點(diǎn)的部分,企業(yè)喜歡聰明的求職者。
4、你對(duì)薪資的要求?
回答提示:如果你對(duì)薪酬的要求太低,那顯然貶低自己的能力;如果你對(duì)薪酬的要求太高,那又會(huì)顯得你分量過重,公司受用不起。一些雇主通常都事先對(duì)求聘的職位定下開支預(yù)算,因而他們第一次提出的價(jià)錢往往是他們所能給予的最高價(jià)錢,他們問你只不過想證實(shí)一下這筆錢是否足以引起你對(duì)該工作的興趣。
回答樣本一:我對(duì)工資沒有硬性要求,我相信貴公司在處理我的問題上會(huì)友善合理。我注重的是找對(duì)工作機(jī)會(huì),所以只要條件公平,我則不會(huì)計(jì)較太多。
回答樣本二:我受過系統(tǒng)的軟件編程的訓(xùn)練,不需要進(jìn)行大量的培訓(xùn),而且我本人也對(duì)編程特別感興趣。因此,我希望公司能根據(jù)我的情況和市場(chǎng)標(biāo)準(zhǔn)的水平,給我合理的薪水。
回答樣本三:如果你必須自己說出具體數(shù)目,請(qǐng)不要說一個(gè)寬泛的范圍,那樣你將只能得到最低限度的數(shù)字。最好給出一個(gè)具體的數(shù)字,這樣表明你已經(jīng)對(duì)當(dāng)今的人才市場(chǎng)作了調(diào)查,知道像自己這樣學(xué)歷的雇員有什么樣的價(jià)值。
5、你對(duì)加班的看法?
回答提示:實(shí)際上好多公司問這個(gè)問題,并不證明一定要加班,只是想
測(cè)試你是否愿意為公司奉獻(xiàn)。
回答樣本:如果工作需要我會(huì)義不容辭加班,我現(xiàn)在單身,沒有任何家庭負(fù)擔(dān),可以全身心的投入工作。但同時(shí)我也會(huì)提高工作效率,減少不必要的加班。
6、如果通過這次面試我們錄用了你,但工作一段時(shí)間卻發(fā)現(xiàn)你根本不適合這個(gè)職位,你怎么辦? 回答提示:一段時(shí)間發(fā)現(xiàn)工作不適合我,有兩種情況:①如果你確實(shí)熱愛這個(gè)職業(yè),那你就要不斷學(xué)習(xí),虛心向領(lǐng)導(dǎo)和同事學(xué)習(xí)業(yè)務(wù)知識(shí)和處事經(jīng)驗(yàn),了解這個(gè)職業(yè)的精神內(nèi)涵和職業(yè)要求,力爭(zhēng)減少差距;②你覺得這個(gè)職業(yè)可有可無,那還是趁早換個(gè)職業(yè),去發(fā)現(xiàn)適合你的,你熱愛的職業(yè),那樣你的發(fā)展前途也會(huì)大點(diǎn),對(duì)單位和個(gè)人都有好處。
7、談?wù)勀銓?duì)跳槽的看法?
回答提示:①正常的“跳槽”能促進(jìn)人才合理流動(dòng),應(yīng)該支持。②頻繁的跳槽對(duì)單位和個(gè)人雙方都不利,應(yīng)該反對(duì)。
8、工作中難以和同事、上司相處,你該怎么辦?
回答提示:①我會(huì)服從領(lǐng)導(dǎo)的指揮,配合同事的工作。②我會(huì)從自身找原因,仔細(xì)分析是不是自己工作做得不好讓領(lǐng)導(dǎo)不滿意,同事看不慣。還要看看是不是為人處世方面做得不好,如果是這樣的話我會(huì)努力改正。③如果我找不到原因,我會(huì)找機(jī)會(huì)跟他們溝通,請(qǐng)他們指出我的不足,有問題就及時(shí)改正。④作為優(yōu)秀的員工,應(yīng)該時(shí)刻以大局為重,即使在一段時(shí)間內(nèi),領(lǐng)導(dǎo)和同事對(duì)我不理解,我也會(huì)做好本職工作,虛心向他們學(xué)習(xí),我相信,他們會(huì)看見我在努力,總有一天會(huì)對(duì)我微笑的。
9、你對(duì)于我們公司了解多少?
回答提示:在去公司面試前上網(wǎng)查一下該公司主營(yíng)業(yè)務(wù)。如回答:貴公司有意改變策略,加強(qiáng)與國(guó)外大廠的OEM合作,自有品牌的部分則透過海外經(jīng)銷商。
10、最能概括你自己的三個(gè)詞是什么?
回答提示:我經(jīng)常用的三個(gè)詞是:適應(yīng)能力強(qiáng),有責(zé)任心和做事有始終,結(jié)合具體例子向主考官解釋。11、你的業(yè)余愛好是什么?
回答提示:找一些富于團(tuán)體合作精神的,這里有一個(gè)真實(shí)的故事:有人被否決掉,因?yàn)樗膼酆檬巧詈撍V骺脊僬f:因?yàn)檫@是一項(xiàng)單人活動(dòng),我不敢肯定他能否適應(yīng)團(tuán)體工作。
12、作為被面試者給我打一下分?
回答提示:試著列出四個(gè)優(yōu)點(diǎn)和一個(gè)非常非常非常小的缺點(diǎn)(可以抱怨一下設(shè)施,沒有明確責(zé)任人的缺點(diǎn)是不會(huì)有人介意的)。
13、你為什么要離開原來的公司?
回答提示:①回答這個(gè)問題時(shí)一定要小心,就算在前一個(gè)工作受到再大的委屈,對(duì)公司有多少的怨言,都千萬不要表現(xiàn)出來,尤其要避免對(duì)公司本身主管的批評(píng),避免面試官的負(fù)面情緒及印象。建議此時(shí)最好的回答方式是將問題歸咎在自己身上,例如覺得工作沒有學(xué)習(xí)發(fā)展的空間,自己想在面試工作的相關(guān)產(chǎn)業(yè)中多加學(xué)習(xí),或是前一份工作與自己的生涯規(guī)劃不合等等,回答的答案最好是積極正面的。②我希望能獲得一份更好的工作,如果機(jī)會(huì)來臨,我會(huì)抓住。我覺得目前的工作,已經(jīng)達(dá)到頂峰,即沒有升遷機(jī)會(huì)。
14、你欣賞哪種性格的人?
回答提示:誠(chéng)實(shí)、不死板而且容易相處的人、有“實(shí)際行動(dòng)”的人。
15、你通常如何對(duì)待別人的批評(píng)?
回答提示:①沈默是金,不必說什么,否則情況更糟,不過我會(huì)接受建設(shè)性的批評(píng)。②我會(huì)等大家冷靜下來再討論。
16、怎樣對(duì)待自己的失敗?
回答提示:我們大家生來都不是十全十美的,我相信我有第二個(gè)機(jī)會(huì)改正我的錯(cuò)誤。
17、你為什么愿意到我們公司來工作?
回答提示:對(duì)于這個(gè)問題,你要格外小心,如果你已經(jīng)對(duì)該單位作了研究,你可以回答一些詳細(xì)的原因,像“公司本身的高技術(shù)開發(fā)環(huán)境很吸引我。”、“我同公司出生在同樣的時(shí)代,我希望能夠進(jìn)入一家與我共同成長(zhǎng)的公司。”、“你們公司一直都穩(wěn)定發(fā)展,在近幾年來在市場(chǎng)上很有競(jìng)爭(zhēng)力。”、“我認(rèn)為貴公司能夠給我提供一個(gè)與眾不同的發(fā)展道路。”這都顯示出你已經(jīng)做了一些調(diào)查,也說明你對(duì)自己的未來有了較為具體的遠(yuǎn)景規(guī)劃。
18、對(duì)這項(xiàng)工作,你有哪些可預(yù)見的困難?
回答提示:①不宜直接說出具體的困難,否則可能令對(duì)方懷疑應(yīng)聘者不行。②可以嘗試迂回戰(zhàn)術(shù),說出應(yīng)聘者對(duì)困難所持有的態(tài)度——工作中出現(xiàn)一些困難是正常的,也是難免的,但是只要有堅(jiān)忍不拔的毅力、良好的合作精神以及事前周密而充分的準(zhǔn)備,任何困難都是可以克服。
19、如果錄用了你,你將怎樣開展工作?
回答提示: ①如果應(yīng)聘者對(duì)于應(yīng)聘的職位缺乏足夠的了解,最好不要直接說出自己開展工作的具體辦法。②可以嘗試采用迂回戰(zhàn)術(shù)來回答,如“首先聽取領(lǐng)導(dǎo)的指示和要求,然后就有關(guān)情況進(jìn)行了解和熟悉,接下來制定一份近期的工作計(jì)劃并報(bào)領(lǐng)導(dǎo)批準(zhǔn),最后根據(jù)計(jì)劃開展工作。”。
分析:這個(gè)問題的主要目的也是了解應(yīng)聘者的工作能力和計(jì)劃性、條理性,而且重點(diǎn)想要知道細(xì)節(jié)。如果向思路中所講的迂回戰(zhàn)術(shù),面試官會(huì)認(rèn)為回避問題,如果引導(dǎo)了幾次仍然是回避的話,此人絕對(duì)不會(huì)錄用了。
20、你希望與什么樣的上級(jí)共事?
回答提示:①通過應(yīng)聘者對(duì)上級(jí)的“希望”可以判斷出應(yīng)聘者對(duì)自我要求的意識(shí),這既上一個(gè)陷阱,又是一次機(jī)會(huì)。②最好回避對(duì)上級(jí)具體的希望,多談對(duì)自己的要求。③如“做為剛步入社會(huì)的新人,我應(yīng)該多要求自己盡快熟悉環(huán)境、適應(yīng)環(huán)境,而不應(yīng)該對(duì)環(huán)境提出什么要求,只要能發(fā)揮我的專長(zhǎng)就可以了。
分析:這個(gè)問題比較好的回答是,希望我的上級(jí)能夠在工作中對(duì)我多指導(dǎo),對(duì)我工作中的錯(cuò)誤能夠立即指出。總之,從上級(jí)指導(dǎo)這個(gè)方面談,不會(huì)有大的紕漏。
21、與上級(jí)意見不一時(shí),你將怎么辦?
回答提示:①一般可以這樣回答“我會(huì)給上級(jí)以必要的解釋和提醒,在這種情況下,我會(huì)服從上級(jí)的意見。”②如果面試你的是總經(jīng)理,而你所應(yīng)聘的職位另有一位經(jīng)理,且這位經(jīng)理當(dāng)時(shí)不在場(chǎng),可以這樣回答:“對(duì)于非原則性問題,我會(huì)服從上級(jí)的意見,對(duì)于涉及公司利益的重大問題,我希望能向更高層領(lǐng)導(dǎo)反映。”
分析:這個(gè)問題的標(biāo)準(zhǔn)答案是思路①,如果用②的回答,必死無疑。你沒有摸清楚改公司的內(nèi)部情況,先想打小報(bào)告,這樣的人沒有人敢要。
22、為什么選擇我們公司?
回答提示:曾經(jīng)在報(bào)章雜志看過關(guān)于貴公司的報(bào)道,與自己所追求的理念有志一同。而貴公司在業(yè)界的成績(jī)也是有目共睹的,而且對(duì)員工的教育訓(xùn)練、升遷等也都很有制度。
分析:去面試前先做功課,了解一下該公司的背景,讓對(duì)方覺得你真的很有心想得到這份工作,而不只是探探路。
23、談?wù)勅绾芜m應(yīng)辦公室工作的新環(huán)境?
回答提示①辦公室里每個(gè)人有各自的崗位與職責(zé),不得擅離崗位。②根據(jù)領(lǐng)導(dǎo)指示和工作安排,制定工作計(jì)劃,提前預(yù)備,并按計(jì)劃完成。③多請(qǐng)示并及時(shí)匯報(bào),遇到不明白的要虛心請(qǐng)教。④抓間隙時(shí)間,多學(xué)習(xí),努力提高自己的政治素質(zhì)和業(yè)務(wù)水平。
24、除了本公司外,還應(yīng)聘了哪些公司?
回答提示:很奇怪,這是相當(dāng)多公司會(huì)問的問題,其用意是要概略知道應(yīng)徵者的求職志向,所以這并非絕對(duì)是負(fù)面答案,就算不便說出公司名稱,也應(yīng)回答“銷售同種產(chǎn)品的公司”,如果應(yīng)聘的其他公司是不同業(yè)界,容易讓人產(chǎn)生無法信任的感覺。
25、你還有什么問題要問嗎?
回答提示:企業(yè)的這個(gè)問題看上去可有可無,其實(shí)很關(guān)鍵,企業(yè)不喜歡說“沒問題”的人,因?yàn)槠浜茏⒅貑T工的個(gè)性和創(chuàng)新能力。企業(yè)不喜歡求職者問個(gè)人福利之類的問題,如果有人這樣問:貴公司對(duì)新入公司的員工有沒有什么培訓(xùn)項(xiàng)目,我可以參加嗎?或者說貴公司的晉升機(jī)制是什么樣的?企業(yè)將很歡迎,因?yàn)轶w現(xiàn)出你對(duì)學(xué)習(xí)的熱情和對(duì)公司的忠誠(chéng)度以及你的上進(jìn)心。
26、如果你被錄用,何時(shí)可以到職?
回答提示:大多數(shù)企業(yè)會(huì)關(guān)心就職時(shí)間,最好是回答“如果被錄用的話,到職日可按公司規(guī)定上班”,但如果還未辭去上一個(gè)工作、上班時(shí)間又太近,似乎有些強(qiáng)人所難,因?yàn)榻唤又辽僖粋€(gè)月的時(shí)間,應(yīng)進(jìn)一步說明原因,錄取公司應(yīng)該會(huì)通融的。