軟件測試總結——常見的面試問題(三)

自動化測試軟件作用(重點):

一:jmeter: 純java編寫負載功能測試和性能測試開源工具, 支持接口自動化測試,錄製、抓包、可進行壓力測試(增加線程,考驗服務器最大支持訪問數)、弱網測試、添加請求、添加斷言,查看斷言、結果樹,聚合報告,分析測試報告等

聚合報告參數詳解: 
1. Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這裏顯示的就是 Name 屬性的值 
2. Samples:請求數——表示這次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那麼這裏顯示100 
3. Average:平均響應時間——默認情況下是單個 Request 的平均響應時間
4. Median:中位數,也就是 50% 用戶的響應時間 
5. 90% Line:90% 用戶的響應時間 
6. Min:最小響應時間 
7. Max:最大響應時間 
8. Error%:錯誤率——錯誤請求數/請求總數 
9. Throughput:吞吐量——默認情況下表示每秒完成的請求數(Request per Second)
10. KB/Sec:每秒從服務器端接收到的數據量,相當於LoadRunner中的Throughput/Sec

 

二:ant: 將軟件編譯、測試、部署等步驟聯繫在一起加以自動化的一個工具,並生成測試報告併發送

 

三:jenkins: Jenkins是一個開源CI服務器,基於Web訪問,jenkins是基於Java開發的一種持續集成工具,用於監控持續重複的工作,能實時監控集成中存在的錯誤,提供詳細的日誌文件和提醒功能,還能用圖表的形式形象地展示項目構建的趨勢和穩定性,擁有大量的插件:這些插件極大的擴展了Jenkins的功能,持續集成工具,所有工作都是自動完成的,無需太多的人工干預,有利於減少重複過程以節省時間和工作量;

 

四:monkey:它是Android SDK系統自帶一個命令行工具,可以運行在模擬器裏或者真是設備中運行。向系統發送僞隨機的用戶事件流,實現對正在開發的應用程序進行穩定性測試。

 

五:charles: 1.抓包(http、https):設置手機HTTP代理、https  charles也需要證書

2.弱網測試:通過Throttle Settings(網絡控制)、Enable Throttling(啓用設置)、Throttle preset(通過預設網絡值來擬定網絡)、設置網絡帶寬值等

3.網絡請求的截取並動態修改:

4.壓力測試:通過右鍵點擊鏈接,Repeat Advanced(重複),選擇Iterations(重複次數)Concurrency(併發數)

5.數據替換:通過鏈接右鍵點擊Map Local(本地位置)進入設置,選擇替換數據文件,替換即可

 

六:selenium :web自動化測試框架(測試瀏覽器兼容性的自動化)selenium不支持桌面軟件自動化測試。軟件測試報告,和用例管理只能依賴第三方插件unittest優點:兼容更多的平臺( Windows、Linux 、 Macintosh等)以及瀏覽器(火狐,IE,谷歌等)

定位元素方式:id、name、class_name、tagname、link_text、partial_link_text、xpath、css_selector

強制等待:sleep()強制等待,不管你瀏覽器是否加載完,程序都得等待

顯示等待:WebDriverWait,配合該類的until()和until_not()方法,就能夠根據判斷條件而進行靈活地等待了.它主要的意思就是:程序每隔多久查看一次,如果條件成立了,則執行下一步,否則繼續等待,直到超過設置的最長時間,然後拋出TimeoutException

隱式等待:implicitly_wait(),整個driver週期有效,如果在規定時間內網頁加載完成,則執行下一步,否則一直等到時間截止

 

七:appium:開源測試自動化框架,可用於原生,混合和移動Web應用程序測試

兩大組件:

一:Appium Server就是Appium的服務端——一個web接口服務,使用Node.js實現。

二:Appium Desktop是一款適用於Mac,Windows和Linux的開源應用程序,提供Appium自動化服務器的強大功能。

Appium GUI是Appium desktop的前身。 也就是把Appium server封裝成了一個圖形界面,降低了使用門檻。

因爲Appium是一個C/S結構,有了服務端的肯定還有客戶端,Appium Clients就是客戶端,它會給服務端Appium Server發送請求會話來執行自動化任務。

Appium-desktop主界面包含三個菜單:

Simple

  • host:設置Appium server的ip地址,本地調試可以將ip地址修改爲127.0.0.1
  • port:設置端口號,默認是4723不用修改
  • start server:啓動 Appium server

Advanced:高級參數配置修改,主要是Android和iOS設備,log路徑等相關信息的配置。

Presets:將Advanced中的一些配置信息作爲預設配置。
 

 

八:pytest:pytest是一個全功能的Python測試框架,

優點:

  • 1、簡單靈活,容易上手,文檔豐富;
  • 2、支持參數化,可以細粒度地控制要測試的測試用例;
  • 3、能夠支持簡單的單元測試和複雜的功能測試,還可以用來做selenium/appnium等自動化測試、接口自動化測試(pytest+requests);
  • 4、pytest具有很多第三方插件,並且可以自定義擴展,比較好用的如pytest-selenium(集成selenium)、pytest-html(完美html測試報告生成)、pytest-rerunfailures(失敗case重複執行)、pytest-xdist(多CPU分發)等;
  • 5、測試用例的skip和xfail處理;
  • 6、可以很好的和CI工具結合,例如jenkins

編寫規則:

  • 測試文件以test_開頭(以_test結尾也可以)
  • 測試類以Test開頭,並且不能帶有 init 方法
  • 測試函數以test_開頭
  • 斷言使用基本的assert即可
# -*- coding:utf-8 -*-
import pytest

@pytest.fixture(scope='function')
def setup_function(request):
    def teardown_function():
        print("teardown_function called.")
    request.addfinalizer(teardown_function)  # 此內嵌函數做teardown工作
    print('setup_function called.')

@pytest.fixture(scope='module')
def setup_module(request):
    def teardown_module():
        print("teardown_module called.")
    request.addfinalizer(teardown_module)
    print('setup_module called.')

@pytest.mark.website
def test_1(setup_function):
    print('Test_1 called.')

def test_2(setup_module):
    print('Test_2 called.')

def test_3(setup_module):
    print('Test_3 called.')
    assert 2==1+1              # 通過assert斷言確認測試結果是否符合預期

fixture的scope參數

scope參數有四種,分別是'function','module','class','session',默認爲function。

  • function:每個test都運行,默認是function的scope
  • class:每個class的所有test只運行一次
  • module:每個module的所有test只運行一次
  • session:每個session只運行一次

setup和teardown操作

  • setup,在測試函數或類之前執行,完成準備工作,例如數據庫鏈接、測試數據、打開文件等
  • teardown,在測試函數或類之後執行,完成收尾工作,例如斷開數據庫鏈接、回收內存資源等
  • 備註:也可以通過在fixture函數中通過yield實現setup和teardown功能

 

九:unitest: unittest單元測試框架不僅可以適用於單元測試,還可以適用WEB自動化測試用例的開發與執行,該測試框架可組織執行測試用例,並且提供了豐富的斷言方法,判斷測試用例是否通過,最終生成測試結果

unittest.TestCase:TestCase類,所有測試用例類繼承的基本類:       class BaiduTest(unittest.TestCase)

unittest.main():將一個單元測試模塊變爲可直接運行的測試腳本,main()方法使用TestLoader類來搜索所有包含在該模塊中以“test”命名開頭的測試方法並自動執行他們。

unittest.TestSuite():unittest框架的TestSuite()類是用來創建測試套件的。

unittest.TextTextRunner():unittest框架的TextTextRunner()類,通過該類下面的run()方法來運行suite所組裝的測試用例。

unittest.defaultTestLoader(): defaultTestLoader()類,通過該類下面的discover()方法可自動更具測試目錄start_dir匹配查找測試用例文件(test*.py),並將查找到的測試用例組裝到測試套件,因此可以直接通過run()方法執行discover。用法如下:discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

unittest.skip():裝飾器,當運行用例時,有些用例可能不想執行等,可用裝飾器暫時屏蔽該條測試用例。一種常見的用法就是比如說想調試某一個測試用例,想先屏蔽其他用例就可以用裝飾器屏蔽。

TestCase類的屬性:

setUp():setUp()方法用於測試用例執行前的初始化工作。如測試用例中需要訪問數據庫,可以在setUp中建立數據庫連接並進行初始化。如測試用例需要登錄web,可以先實例化瀏覽器。

tearDown():tearDown()方法用於測試用例執行之後的善後工作。如關閉數據庫連接。關閉瀏覽器。

assert*():一些斷言方法:在執行測試用例的過程中,最終用例是否執行通過,是通過判斷測試得到的實際結果和預期結果是否相等決定的。

TestSuite類的屬性:

addTest(): addTest()方法是將測試用例添加到測試套件中,是將test_baidu模塊下的BaiduTest類下的test_baidu測試用例添加到測試套件。   suite = unittest.TestSuite()                  suite.addTest(test_baidu.BaiduTest('test_baidu'))

TextTextRunner的屬性:

run(): run()方法是運行測試套件的測試用例,入參爲suite測試套件:    runner = unittest.TextTestRunner() runner.run(suite)

 

微信朋友圈測試用例:

這裏寫圖片描述

 

關係型數據庫:

  • 關係型數據庫是依據關係模型來創建的數據庫。
  • 所謂關係模型就是“一對一、一對多、多對多”等關係模型,關係模型就是指二維表格模型,因而一個關係型數據庫就是由二維表及其之間的聯繫組成的一個數據組織。
  • 關係型數據可以很好地存儲一些關係模型的數據,比如一個老師對應多個學生的數據(“多對多”),一本書對應多個作者(“一對多”),一本書對應一個出版日期(“一對一”)
  • 關係模型是我們生活中能經常遇見的模型,存儲這類數據一般用關係型數據庫
  • 關係模型包括數據結構(數據存儲的問題,二維表)、操作指令集合(SQL語句)、完整性約束(表內數據約束、表與表之間的約束)。
  • 常見的關係型數據庫Oracle、MySQL、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access
  • 關係型數據庫的特點:安全(因爲存儲在磁盤中,不會說突然斷電數據就沒有了)、容易理解(建立在關係模型上)、

    但不節省空間(因爲建立在關係模型上,就要遵循某些規則,好比數據中某字段值即使爲空仍要分配空間)

非關係型數據庫:

非關係型數據庫主要是基於“非關係模型”的數據庫(由於關係型太大,所以一般用“非關係型”來表示其他類型的數據庫)

列模型:存儲的數據是一列列的。關係型數據庫以一行作爲一個記錄,列模型數據庫以一列爲一個記錄。(這種模型,數據即索引,IO很快,主要是一些分佈式數據庫)

鍵值對模型:存儲的數據是一個個“鍵值對”,比如name:liming,那麼name這個鍵裏面存的值就是liming

常見非關係模型數據庫:列模型:Hbase、鍵值對模型:redis,MemcacheDB、文檔類模型:mongoDB

非關係型數據庫的特點:效率高(因爲存儲在內存中)、但不安全(斷電丟失數據,但其中redis可以同步數據到磁盤中),現在很多非關係型數據庫都開始支持轉存到磁盤中。

 

MySQL外連接、內連接的區別?

left join (左連接):返回包括左表中的所有記錄和右表中連接字段相等的記錄。
right join (右連接):返回包括右表中的所有記錄和左表中連接字段相等的記錄。
inner join (等值連接或者叫內連接):只返回兩個表中連接字段相等的行。內連接是交集
full join (全外連接):返回左右表中所有的記錄和左右表中連接字段相等的記錄。外連接是並集union

多表聯查-- 2.查詢科目爲java的最高成績的學生名字和編號

SELECT stu1.sname,stu1.sid,i.subname,MAX(i.cj) FROM (SELECT stu3.subname,stu2.sid,stu2.cj FROM stu3 INNER JOIN stu2 ON stu3.subid = stu2.subid WHERE subname LIKE "java") i INNER JOIN stu1 ON i.sid = stu1.sid

+-----+------+------+-------+------------+--------------+--------+-------+
多表聯查-- 3.查詢名字爲李四的所有科目總成績

SELECT stu1.sname,SUM(stu2.cj) FROM  stu1 INNER JOIN stu2 ON stu1.sid = stu2.sid where sname LIKE "李四"
 

數據庫常用方法:

增:Insert  into 表名 value 值

刪:Delect from 表名  where  值

改:Update 表名 set 字段=字段 where 字段;

查:Select * from 表名

自增  auto_increment       
主鍵  primary key
非空  not null
唯一 unique
默認值  default
外鍵  foreign key 

查看所有的表  SHOW TABLES ;

創建一個表  CREATE TABLE n(id INT, name VARCHAR(10));

# 添加字段: Alter table 表名 add 字段名 數據類型Alter table n ADD age VARCHAR(2) ;

# 刪除字段: Alter table 表名 drop 字段名

# 更改字段屬性和屬性:Alter table n CHANGE age a INT;

# 只更改字段屬性:Alter table n MODIFY age VARCHAR(7) ;

增加數據  INSERT INTO n VALUES (1, 'tom', '23'), (2, 'john', '22');

刪除數據:DELETE FROM n WHERE id = 2;

更改數據:UPDATE n SET name = 'tom' WHERE id = 2;

數據查找 : SELECT * FROM n WHERE name LIKE '%h%';

數據排序(order by)(反序) :Select * from 表名 order by stu_age asc/desc

分組查詢(group by):Select * from 表名 group by sex  =‘男’

總 數(count)    SELECT count(id) AS total FROM n;

總 和(sum)    SELECT sum(age) AS all_age FROM n;

平均值(avg)   SELECT avg(age) AS all_age FROM n;

最大值(max)   SELECT max(age) AS all_age FROM n;

最小值(min)   SELECT min(age) AS all_age FROM n;


 

 

Linux:

如何殺死一個進程:1.先查找進程號:ps -ef | grep 進程(例如:tomcat)    2.殺死進程:kill -9 進程號

查看進程和端口號的使用情況:netstat -tunlp|grep

查看端口號被佔用:netstat -anp | grep 端口號     查看是start狀態還是stop狀態

查看內存cat /proc/meminfo

查看cpu:cat /proc/cpuinfo

 

進入根目錄:cd/

返回上層:cd..

更新:source  

顯示工作路徑:pwd      

查看目錄中的文件 :ls                

編輯:vi       

編輯保存:wq         

刪除目錄:rmdir

創建目錄:mkdir 

查找文件:find

解壓:tar -vxzf     

顯示當前進程:ps

 

 

 

如何通過子元素定位父元素:1.可以使用..代表的是父節點  2.可以使用parent來定位父類元素

 

Android手機和IOS手機,系統有什麼區別?
1、兩者運行機制不同:IOS採用的是沙盒運行機制,安卓採用的是虛擬機運行機制。
2、兩者後臺制度不同:IOS中任何第三方程序都不能在後臺運行;安卓中任何程序都能在後臺運行,直到沒有內存纔會關閉。
3、IOS中用於UI指令權限最高,安卓中數據處理指令權限最高。

Android:一:兼容性測試,Android 從4.0版本的手機測試到9.0版本手機。二:各大品牌的手機都的進行測試,比如:小米小米9 小米8 小米7 小米6 note 紅米系列 7紅米5,華爲: 華爲mate20 華爲mate10,華爲榮耀: 榮耀10,9,8 ,vivo: x21,27,23,oppo: R7,R9,R11,三星手機: note9, 8,7 S9,8。三:穩定性測試: 使用monkey命令進行穩定性測試

ios:兼容性測試:ios版本測試從9-12,手機型號從4S測試到xmax

web端測試:兼容性測試:IE瀏覽器7-12,火狐瀏覽器 35-最新的,谷歌瀏覽器,(http、https)

 

不可逆操作如何處理:如刪除訂單:

1.假刪除(修改刪除標識即可)

2.真刪除就真的刪除了,爲不可恢復狀態,除非再新建訂單重新執行流程

 

在測試中,上下游接口有數據依賴如何處理(下個接口用到上個接口的數據

1.使用靜態值,給定一個符合條件的死數據

2.或者從數據庫中直接獲取數據

 

軟件的生命週期:1.產品收集市場需求,2.需求分析,3.產品設計需求,4.UI界面設計,5.前後臺開發,設計數據庫表、框架,編碼,6.版本測試,7.產品上線,8.產品運營

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章