




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、SIPp腳本編寫方法基礎(chǔ)作者王偉版本號目錄1. 腳本格式1.1. 基于XML進行擴展SIPp的測試腳本遵循標準的XML版本的語法規(guī)范,XML即“可擴展標記語言”extensibleMarkupLanguage的縮寫,W3c組織與1998年發(fā)布XML規(guī)范。1.2. DTD擴展語法規(guī)則SIPp的執(zhí)行目錄中,存在一個文件。該文件為標準的xml擴展語法規(guī)則,在該文件中,對sendrecv、paus制元素增加了定義,包括其屬性列表等內(nèi)容,可作為腳本文件格式的校驗。1.3. 腳本結(jié)構(gòu)一個標準的SIPp腳本,文件起始應(yīng)為通用的xml前導(dǎo)區(qū)和DTD文件定義區(qū)如圖所示:接下來使用和包括的部分,即為腳本的正文部分
2、。sipp腳本正文部分,包含如下幾個區(qū)域:1. 初始化區(qū)在初始化區(qū)域中,通常用來進行全局變量的定義和賦值等操作,在腳本未進行邏輯流程前,預(yù)先完成初始化動作。初始化區(qū)是在腳本正文的最開始,通過使用命令小讓和/小讓,并在其之間才f入一些nop和label命令即可實現(xiàn),在初始場景中的變量,僅用于全局變量,并不會應(yīng)用于呼叫。例如下圖中,在初始化區(qū)對THINKTIME進行賦值:2. 邏輯執(zhí)行區(qū)邏輯執(zhí)行區(qū)中包括了業(yè)務(wù)流程的相關(guān)內(nèi)容,比如接收消息、發(fā)送消息、暫停時長、分支判斷、媒體播放、內(nèi)外部命令執(zhí)行等操作。邏輯執(zhí)行區(qū)是腳本的最關(guān)鍵部分,編寫sipp腳本,主要也就是針對該部分進行編寫和調(diào)試。3. 變量抑制區(qū)
3、該部分是為了避免在腳本邏輯區(qū)定義了大量的變量,但實際并未使用導(dǎo)致運行時報錯無法執(zhí)行的問題,不論定義了多少變量,這些變量有無被使用,只需要添加進變量抑制區(qū)的列表中,腳本均可正常執(zhí)行。該部分僅有一個命令Reference/,variables屬性為所需抑制的變量列表。如下圖所示:4. 定時器自定義區(qū)該區(qū)域主要作用為:針對消息響應(yīng)時長(ResponseTime以及呼叫持續(xù)時長(CallLength)的Timer進行自定義間隔的配置,以獲取所需的顯示范圍,例如自定義timer配置為:則在sipp運行時,查看運行統(tǒng)計界面呈現(xiàn)如下:1.4. 注釋sipp腳本注釋的語法格式為xxx,支持多行注釋,如:2.
4、腳本類型SIPp腳本根據(jù)使用場景不同,主要分為UAC、UAS、3PCC和OCC4種類型,每種類型均有其特定的使用方式,內(nèi)部邏輯也有所不同。2.1. UAC顧名思義,UAC類型的腳本主要是模擬sip會話中的UAC側(cè),即負責(zé)發(fā)起會話的client端。如注冊客戶端、主叫用戶、訂閱者等。通常的UAC腳本邏輯區(qū)會以send作為業(yè)務(wù)流程的起始。UAC腳本一旦啟動,如果不設(shè)置起始暫停時長的參數(shù),通常會立即開始執(zhí)行。2.2. UASUAS與UAC相對,主要模擬sip會話的UAS側(cè),啟動后即進入被動接收狀態(tài),通常作為server端使用,如注冊服務(wù)器、被叫用戶、通知者、業(yè)務(wù)網(wǎng)關(guān)等。通常的UAS腳本邏輯區(qū)會以rec
5、v作為業(yè)務(wù)流程的起始。UAS腳本啟動后,即綁定相關(guān)本地socket,進入接收消息的狀態(tài)。2.3. 3PCC(三方通話)SIPp工具允許多個腳本實例間進行交互,完成較為復(fù)雜的業(yè)務(wù)流程。如三方通話等業(yè)務(wù),因此該種腳本在普通腳本的基礎(chǔ)上,更多地使用內(nèi)部cmd交互命令,如recvcmd、sendcmd等在不同腳本間傳遞會話參數(shù),配合完成復(fù)雜流程的測試實現(xiàn)。sipp還提供了擴展的3pcc模式,支持master和slave的腳本角色。該類型的腳本編寫和調(diào)試較為復(fù)雜,本文檔中不再贅述,如有興趣可以翻閱sipp的使用手冊等文檔,其中有詳細說明。2.4. OCC(Out-of-call)OCC(Out-of-c
6、all)腳本作為特殊類型的腳本,通常不會單獨使用,而是與UAC腳本配合使用(也只能與UAC腳本配合,UAS等類型腳本無法支持-occsn等執(zhí)行命令)。主要作用為擴展UAC腳本的適用范圍,使UAC腳本能夠在接收到不同會話內(nèi)的非預(yù)期消息時,不至于直接丟棄。如注冊客戶端可能會遇到接收到通知NOTIFY的消息,此時就需要在運行register腳本的時候適用-oocsn或-oocsf參數(shù),配合ooc腳本,實現(xiàn)對NOTIFY消息返回200的操作。3. 命令與屬性3.1. 常用命令SIPp工具提供的命令相當豐富,包括消息操作命令、變量操作、正則表達式、賦值和判斷、內(nèi)部命令、外部命令、日志操作、媒體命令等多種
7、,在一般的使用場景下,通常根據(jù)不同的動作,來進行命令的使用。下面針對比較常用的場景,如發(fā)送消息、接收消息、媒體播放等進行描述:(更詳細的命令功能及示例,可以翻閱sipp的使用手冊等文檔)一個最基本的sipp腳本,通常包含了sendrecv、nop、pause這幾個命令。其中send為發(fā)送sip消息,recv為接收sip消息,nop為處理非業(yè)務(wù)的邏輯,pause為提供暫停時長。例如一個基本語音呼叫的主叫側(cè)腳本:首先使用send命令發(fā)送INVITE消息,注意在發(fā)送消息時,sip消息所有內(nèi)容均包含在標準的xml數(shù)據(jù)格式CDATA內(nèi),CDATA的語法格式請格外注意,避免因為語法錯誤導(dǎo)致無法正確發(fā)送。(
8、注:在構(gòu)造發(fā)送的INVITE消息時,為實現(xiàn)批量發(fā)送,使用到了大量的變量和關(guān)鍵字,在后續(xù)內(nèi)容中會詳細加以說明。)發(fā)送出消息后,還需要進行后續(xù)響應(yīng)消息的接收,請注意由于sip協(xié)議存在臨時響應(yīng)和最終響應(yīng)兩種,而1xx的響應(yīng)在業(yè)務(wù)中可能存在,也可能不存在,因此需要采用可選屬性加以區(qū)別。(注:optional=true”即表示該條消息為可選接收,如果沒有收到,也不會影響后續(xù)消息的接收及處理,如100/183/180。而200為必選接收消息,只有當接收到該消息后,腳本才會繼續(xù)后續(xù)流程,因此沒有optional參數(shù)。)在接U到200ok消息,并發(fā)送出ACK后,語音通話接續(xù)流程即完成,此時根據(jù)實際業(yè)務(wù)流程,需
9、要進行語音媒體的傳輸,因此腳本在這里需要增加一個nop命令,用于媒體的播放(注:nop命令可以用于任何非消息處理的位置,在nop命令中增加action命令,然后即可執(zhí)行類似媒體處理、變量操作、條件判斷等動作。)在執(zhí)行媒體播放命令后,由于sipp在執(zhí)行nop相關(guān)命令后,不會等待命令執(zhí)行完畢而是立即執(zhí)行后續(xù)腳本內(nèi)容,因此為保證媒體播放正常,我們還需要根據(jù)實際要求,將腳本暫停一段時間,以確保流程模擬正確。(注:millisenconds屬性可以自定義暫停的時長,單位為ms,如果該屬性為空,則可以通過在執(zhí)行命令中增加“-d1000。來指定暫停時長)3.2. 常用屬性列表命令屬性描述示例用于消息的發(fā)送,
10、常用參數(shù)包括retrans:udp報文重傳時長;lost:丟包率;start_txn:啟動響應(yīng)時間記錄ack_txn:記錄接收響應(yīng)時間,與start_txn匹配用于消息的接收,常用參數(shù)包括response:期望收到的響應(yīng)消息request:期望收到的請求消息optional:可選接收消息,值為true或globaltimeout:超時時長,默認超時后直接ENDontimeout:超時后的跳轉(zhuǎn)處理action:收到消息后米取的處理動作regexp_match:檢查收到消息是否匹配預(yù)期用于設(shè)置暫停時間,常用參數(shù)包括milliseconds:設(shè)置暫停時長,單位msvariable:設(shè)置當變量出現(xiàn)時暫
11、停distribution:使用GSL定義或分布模型定義呼叫時長pausedistribution=exponentialmean=900000”/用于非協(xié)議消息處理的命令執(zhí)行,常用參數(shù)包括action:執(zhí)行命令動作用于兩個SIPp實例間的交互發(fā)送,常用于3PCCW,常用參數(shù)包括:MT3PCCSi的參數(shù)傳遞dest:僅用于擴展模式3PCC用于兩個SIPp實例間的交互接收,常用于3PCCW,常用參數(shù)包括action:接收到命令時的執(zhí)行命令動作src:僅用于擴展模式3PCCaction通用屬性:屬性名描述示例start_rtd啟動響應(yīng)定時器sendstart_rtd=invite”rtd停止響應(yīng)定
12、時器repeat_rtd重復(fù)啟用響應(yīng)定時器crlf運行界面增加回車換行next跳轉(zhuǎn)任意labeltest與next一起使用,設(shè)置跳轉(zhuǎn)條件chance與test、next一起使用,當test結(jié)果有值時,則概率跳轉(zhuǎn)counter計數(shù)器累加13.3. 正則表達式正則表達式作為sipp中極為重要的功能,在各個場景下應(yīng)用廣泛,最常見的是通過正則表達式,獲取接收消息中某個參數(shù),并將該參數(shù)賦給變量,用于后續(xù)流程的使用。正則表達式的使用語法如下圖所示:正則表達式的命令為regexp屬性為需要匹配的表達式內(nèi)容,其中使用()”包括起來的部分,為匹配項,可以賦給變量;search_in屬性為設(shè)置本次查詢的方式,si
13、pp支持3種正則匹配的方式,分別為:1.頭域查詢匹配當search_in=hdr”時,表示正則按照頭域匹配,必須包含heade嚓數(shù),給出需要查詢的頭域名稱,如header=From。sipp會在指定的頭域中進行匹配。注:start-line的匹配也是用頭域匹配方式。2 .消息查詢匹配當search_in=msg”時,表示正則根據(jù)整個消息內(nèi)容進行匹配,通常在需要匹配SDP內(nèi)容時會用到。3 .變量查詢匹配當searchjnvar”時,表示正則按照變量進行匹配,必須配置variable參數(shù),給出需要匹配的變量名稱,如variable=header_to_tag(。4 .變量與關(guān)鍵字4.1. 關(guān)鍵字的
14、使用sipp中定義了大量的關(guān)鍵字,涉及到網(wǎng)絡(luò)參數(shù)、sip會話參數(shù)和媒體參數(shù)等等,需要在編寫腳本時加以注意。關(guān)鍵字的引用格式為keyword,例如locao_ip、call_id等。下表列出了常用的關(guān)鍵字:關(guān)鍵字描述備注service由參數(shù)-s傳遞,一般用來指定單個主被叫remote_ip遠端設(shè)備地址remote_port遠端設(shè)備端口。可以在腳本中使用偏移量,如remote_port+3transport指定傳輸層協(xié)議,UDP/TCP由參數(shù)-t決定local_ip主機本地地址,可以由參數(shù)-i指定local_port由系統(tǒng)隨機分配可由-p指定,可以在腳本中使用偏移量,local_port+3len
15、sdp長度,用于Content-Length頭域,由sipp自動生成或者手動指7E,可以添加偏移量,如len+3call_number呼叫索引,從1開始,每增加一個呼叫遞增1cseq初始值為1,可以使用參數(shù)-base_cseq手動指定初始值。media_ip本地媒體流ip,可以由-mi參數(shù)指定media_port本地媒體流端口,可由-mp指定,可以設(shè)置偏移量media_port+3auto_media_port自動指定媒體流端口,僅用于pcap。該參數(shù)使多個呼叫的音頻和視頻端口從-mp指定的端口開始,并給每個新的呼叫分配端口。SIPp默認支持10000個rtp流并發(fā)last_*此關(guān)鍵字附于從接
16、收的上一個sip消息中提取指定頭域(如果存在)的值。比如last_to則表小從接收的上一個sip消息中提取To域的消息保存到last_to中并應(yīng)用。field0-nfile=line=從外部文件csv加載值,file表7K選擇從命令行中指定的csv文件的一個文件作為外部文件;line定義選擇的外部文件的起始行,field選擇字段filename=把指定的文件中內(nèi)容全部插入到sip消息中。由于空格符,回車符及換行符不被某些關(guān)鍵字識另L所以插入的文件需要被精確地編輯成你想要的格式才行,否則會有亂碼。timestamp當前時間戳,與錯誤日志的時間戳格式一樣last_message上一個收到的消息au
17、thentication用丁認證頭(authenticationhead),這個關(guān)鍵字可以使用參數(shù),書寫格式為:authenticationusername=myusernamepassword=mypassword,如果沒后指定用戶名(username),則需使用命令行參數(shù)-au或者-s指定;如果沒后指定號碼(password),則需使用命令行參數(shù)-ap指定pid指tesipp的pid,即進程號routes如果在recv命令中已設(shè)置rrs屬性為true,則Record-Route頭被存儲在關(guān)鍵子route中,可使用routes調(diào)用。next_url如果在recv命令中已設(shè)置rrs屬性為tru
18、e,則next_url中包含Contact頭中的內(nèi)容branch生成一個由(z9hG4bK)+callnumber+message索引組成的branchid到腳本中。如果你想要使用與之前的消息一樣的branchid,你可以使用偏移量指定,如branch-Nmsg_index在腳本中提供消息號clock_tick在消息中包含sipp的內(nèi)部時鐘sipp_version在消息中包含sipp的版本fill使用字符填充消息users如果在命令行中指定了-users參數(shù),則這個關(guān)鍵字表示當前已經(jīng)運行的用戶的數(shù)量userid如果在命令行中指定了-users參數(shù),則這個關(guān)鍵字表示當前正在運行的用戶的id(范圍
19、為0到users-1)4.2.變量定義與使用sipp的腳本中,支持雙精度浮點型變量和字符串變量兩種變量類型.5 .浮點型變量針對浮點型變量的操作命令主要有assgin(賦值)、sample(統(tǒng)計分布)和todouble(強制類型轉(zhuǎn)換),以及加減乘除等簡單算術(shù)運算,舉例如下:浮點型變量還支持變量比較測試功能,該部分在分支一節(jié)中會重點描述。6 .字符串變量可以使用命令&建字符串變量,該命令有兩個參數(shù)“assign_tO不口“value,例如:字符串變量支持比較操作,命令為,其對字符串比較的值是一個小于,等于,或大于0的雙精度整型值。通常該功能用在對正則表達式提取結(jié)果的操作,以及從外部文件獲取值的操
20、作中,例如:4.3.鑒權(quán)在sipp的關(guān)鍵字和變量使用中,有一類特殊的變量需要重點說明,那就是鑒權(quán)。sipp支持標準的Digest和AKA兩種鑒權(quán)方法。具體的使用方法如下:1.在接收到401或407響應(yīng)時,如果該流程需要鑒權(quán),則需要在recv命令中增加屬性auth=true,sipp會記錄該消息中鑒權(quán)頭域的相關(guān)值。2.3.隨后在發(fā)送的第二條請求消息中,使用authentication關(guān)鍵字,指定用戶名及密碼(Digest方式)或aka_K、aka_OP、aka_AMF(AKA),sipp將自動計算出response并構(gòu)造相關(guān)頭域內(nèi)容。例如:還可以通過在外部文件中某一列,配置authenticat
21、ionusername=1001password=1001J然后在消息中使用fieldN弓I用,來實現(xiàn)不同用戶的鑒權(quán)過程。4. sipp腳本中還支持對鑒權(quán)的response吉果進行校驗,該操作使用verifyauth命令來完成,并將檢查結(jié)果賦值給一個布爾變量中。例如:5. 分支和跳轉(zhuǎn)5.1. 標簽sipp腳本支持自定義標簽操作,因此可以通過next、jump等命令,實現(xiàn)對流程邏輯的分支和跳轉(zhuǎn)功能,類似C語言中的goto。標簽的定義語法格式如下:其中id屬性值為該標簽的標識,可以通過next屬性進行標簽之間的跳轉(zhuǎn),例如:在例子中,recv命令使用了next,即如果收到了486響應(yīng),則直接跳轉(zhuǎn)至i
22、d為err_ack的label處。sipp支持通過變量測試,來進行某些條件的判斷,繼而執(zhí)行相關(guān)的操作,類似于開發(fā)語言中的if-else語法,變量測試的動作命令為“test”,含有四個參數(shù):variable,value,assign_to,compare。variable和value的比較的結(jié)果,通過assgin_to賦給某一變量,值為1或00compare為比較的操作方法,一共有6種,分別為:equalnot_equalgreater_thanless_thangreater_than_equalless_than_equal舉例如下:上述語句中,變量st與10進行比較,如果小于10,則res
23、ult=1,否則result=0。5.3. 跳轉(zhuǎn)和循環(huán)sipp腳本的正常執(zhí)行流程為順序依次執(zhí)行相關(guān)語句,但是在某些場景下需要非線性地執(zhí)行,例如收到錯誤消息,則跳轉(zhuǎn)至錯誤處理等,就需要用到分支功能。結(jié)合上文內(nèi)容可知,sipp的分支功能時通過標簽和跳轉(zhuǎn)命令來實現(xiàn)的。在任意一個動作命令之后添加一個next=”label_id”的參數(shù),當腳本執(zhí)行完這個動作后就會跳到指定標號處繼續(xù)往下執(zhí)行,另外,如果在next參數(shù)后再添加一個test=m參數(shù),腳本僅在變量$m為真時才會跳到指定標號,這個特性結(jié)合條件判斷,可以用來實現(xiàn)某些特殊要求。例如:上述例子為注冊服務(wù)器部分腳本,實現(xiàn)的效果是:當接收到REGISTE就
24、息后,通過正則表達式獲取Expires頭域的值,并將其與0比較,如果相等,則表示該消息為注銷請求,result2=1。nop命令行中,判斷如果result2=1,這跳轉(zhuǎn)至deregister標簽,進行注銷流程的處理。(注:通過正則表達式匹配而獲取到的值,均為字符串變量,因此無法直接與數(shù)值0進行比較,而是通過strcmp命令進行字符串比較,將此結(jié)果賦給result,再對result和0進行二次比較判斷,最終獲得結(jié)果。)5.4. 概率分支為了更加符合真實測試環(huán)境的業(yè)務(wù)流程,sipp還提供了概率分支功能,即通過在next屬性后,增加chance屬性,并配置0-1之間的數(shù)值,模擬幾率跳轉(zhuǎn)分支動作。例如
25、:當sipp腳本執(zhí)行到該段時,有50%的幾率會跳轉(zhuǎn)至401標簽處,緊接著會有30%勺幾率跳轉(zhuǎn)至ENDS簽。(注:1. 由于chance屬性必須與test配對使用,因此如果不需判斷直接跳轉(zhuǎn),可以配置test=”1”,類似于ifTrue,即始終執(zhí)行。2. 配置chance時必須注意,該值僅為當前所有會話的幾率,即如例子中配置的數(shù)值,則會有50%的會話跳轉(zhuǎn)至401標簽,15%的會話跳轉(zhuǎn)至ENDS簽,65%勺會話順序線性執(zhí)行。)6. 文件引用6.1. 外部文件格式sipp腳本支持通過引用外部文件的方式,導(dǎo)入變量內(nèi)容以供使用。外部文件的后綴名為.csv或.conf,可以在命令行使用“-inf文件名”參數(shù)
26、來引入變量到腳本中。文件的第一行須中明變量的讀取方式是順序讀取(SEQUENTIAL還是隨機讀?。≧ANDQM還是基于用戶的方式讀取(USER。每一行對應(yīng)一個呼叫,使用“;”分隔符分隔每一項數(shù)據(jù),分開的項在腳本中作為變量名filed0,field1,?fieldn來引用。例如:SEQUENTIALSarah;sipphone32Bob;sipphone12Fred;sipphone94該文件中的行會被按順序讀取,第一個呼叫第一行,第二個呼叫第二行。在腳本中的任何地方只要出現(xiàn)了關(guān)鍵詞field0,根據(jù)第幾個呼叫決定,這個關(guān)鍵詞就會被替換為Sarah或者Bob或者Fred,field1也是類似。如
27、果達到了文件末尾則再重新開始,一直循環(huán),文件的大小沒有限制。在實際使用中,也可以使用參數(shù)使得不從第一行開始,例如從第二行開始:field0line=1另外,還可以使用不止一個外部文件來引入變量,這在測試一些場景是很有用的,比如要做一個測試主叫號碼是按順序的但是被叫是隨機的時候,就可以用一個第一行為順序的文件和一個第一行為隨機的文件來實現(xiàn)了。例如:INVITEsip:field0file=SIP/From:sippuser;tag=pidSIPpTag00call_numberTo:sutuser由于在數(shù)據(jù)較多時,編輯和使用均不方便,sipp還支持對外部文件的格式化定義,然后在程序中自動根據(jù)規(guī)則
28、生成相應(yīng)的數(shù)據(jù)。(該部分內(nèi)容較多,詳見sipp使用手冊)6.2. 引用方法sipp腳本中使用外部文件,常見的場景有兩種:1. 利用外部文件引入field變量,構(gòu)造相應(yīng)的發(fā)送消息體例如在主叫用戶的腳本中,可以通過引用文件中的field0、fieldl,分別對應(yīng)主叫號碼和被叫號碼,構(gòu)造From頭域和To頭域。2.通過查找外部文件,獲取對應(yīng)的行號,隨后進行相關(guān)處理例如,在針對不同的被叫號碼,進行用戶忙、無響應(yīng)、前轉(zhuǎn)等業(yè)務(wù)時,可以通過事先配置文件,在其中針對不同被叫號碼,分別設(shè)置若干列,對應(yīng)不同的值,并在被叫用戶的腳本中,使用正則表達式獲取到被叫號碼,再使用lookup命令查詢文件,匹配當前用戶號碼處于第幾行,并讀取改行的field1的值,然后通過變量測試,跳轉(zhuǎn)不同的處理分支。6.3.文件索引在針對外部文件進行查找命令時,必須先對該文件生成索引,具體方法為再執(zhí)行sipp腳本的命令中,使用-infindex參數(shù)對引入的文件生成索引,參數(shù)值為該文件的文件名,如:-infindex0。注:在通常情況下,文件的索引值均設(shè)置為從0開始。7. 腳本中的命令操作7.1. 內(nèi)部命令sipp腳本支持的內(nèi)部命令,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 神經(jīng)病考試模擬題+答案
- 資金管理與運作作業(yè)指導(dǎo)書
- 信息技術(shù)支持下的農(nóng)業(yè)電商平臺協(xié)議
- 銷售提成與售后服務(wù)合同書
- 興業(yè)銀行招聘面試常見試題及回答
- 浙江國企招聘2025浙江省鹽業(yè)集團有限公司招聘22人筆試參考題庫附帶答案詳解
- 2025年春季黑龍江大慶油田有限責(zé)任公司高校畢業(yè)生招聘50人筆試參考題庫附帶答案詳解
- 2025年合肥市產(chǎn)業(yè)投資控股(集團)有限公司校園招聘31人筆試參考題庫附帶答案詳解
- 2025內(nèi)蒙古能源集團智慧運維公司校園招聘(55人)筆試參考題庫附帶答案詳解
- 計量試題庫及答案大全
- 二甲雙胍(格華止)2型糖尿病的基礎(chǔ)用藥
- 腦白金操作手冊
- 門診病歷書寫模板全
- 15萬ta焦油加工廠工業(yè)萘制取工段的初步設(shè)計
- 湖南省對口招生考試醫(yī)衛(wèi)專業(yè)十年真題(2010-2019年)
- 鋼結(jié)構(gòu)桁架吊裝安裝專項施工方案
- 課題研究活動記錄及課題研究會議記錄表
- 風(fēng)電場道路工程施工方案
- TGDMDMA 0026-2023 牙科種植用導(dǎo)板
- 腫瘤細胞生物學(xué)1-1
- 中藥飲片的基礎(chǔ)知識和中藥飲片的養(yǎng)護培訓(xùn)課件
評論
0/150
提交評論