精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Sentry 開發者貢獻指南 - 測試技巧

開發
作為 CI 流程的一部分,我們在 Sentry 運行了多種測試。本節旨在記錄一些 sentry 特定的幫助程序, 并提供有關在構建新功能時應考慮包括哪些類型的測試的指南。

作為 CI 流程的一部分,我們在 Sentry 運行了多種測試。本節旨在記錄一些 sentry 特定的幫助程序, 并提供有關在構建新功能時應考慮包括哪些類型的測試的指南。

獲取設置

驗收和 python 測試需要一組有效的 devservices。建議使用 devservices 來確保所需要的服務正在運行。如果您還使用本地環境進行本地測試,您將需要使用 --project 標志將本地測試卷與測試套件卷分開:

# 關閉本地測試服務。
sentry devservices down

# 打開帶有 test 前綴的服務以使用單獨的容器和卷
sentry devservices up --project test

# 驗證測試容器是否正確出現
docker ps --format '{{.Names}}'

# 稍后當您完成運行測試并想再次運行本地服務器時
sentry devservices down --project test && sentry devservices up

使用 --project 選項時,您可以確認哪些容器正在運行 docker ps。每個正在運行的容器都應該以 test_ 為前綴。有關管理服務的更多信息,請參閱 devservices docs 部分。

??https://develop.sentry.dev/services/devservices/??

Python 測試

對于 python 測試,我們使用 pytest 和 Django 提供的測試工具。在此基礎之上,我們添加了一些基本測試用例(在 sentry.testutils.cases 中)。

??https://docs.pytest.org/en/latest/??

端點集成測試是我們大部分測試套件的重點所在。這些測試幫助我們確保我們的 customers、integrations 和前端應用程序的 API 繼續以預期的方式工作。您應該努力包含涵蓋各種用戶角色、跨組織/團隊訪問場景以及無效數據場景的測試,因為這些在手動測試時經常被忽略。

運行 pytest

您可以根據更改的范圍使用 pytest 運行單個目錄、單個文件或單個測試:

# 對整個目錄運行測試
pytest tests/sentry/api/endpoints/

# 對目錄中匹配模式的所有文件運行測試
pytest tests/sentry/api/endpoints/test_organization_*.py

# 從單個文件運行測試
pytest tests/sentry/api/endpoints/test_organization_group_index.py

# 運行單個測試
pytest tests/snuba/api/endpoints/test_organization_events_distribution.py::OrganizationEventsDistributionEndpointTest::test_this_thing

# 在匹配子字符串的文件中運行所有測試
pytest tests/snuba/api/endpoints/test_organization_events_distribution.py -k method_name

pytest 的一些常用選項是:

-k 通過子字符串過濾測試方法/類。

-s 在運行測試時不要捕獲標準輸出。

有關更多使用選項,請參閱 pytest 文檔。

??http://doc.pytest.org/en/latest/usage.html??

在測試中創建數據

Sentry 還添加了一套 factory 輔助方法,可幫助您構建數據以針對其編寫測試。 sentry.testutils.factories 中的工廠方法可用于我們所有的測試套件類。使用這些方法來建立所需的組織、項目和其他基于 postgres 的狀態。

您還應該使用 store_event() 以類似于應用程序在生產中所做的方式存儲事件。存儲事件需要您的測試繼承自 SnubaTestCase。使用 store_event() 時,請注意在事件上設置過去的 timestamp。省略時,timestamp 將使用 'now',這可能會導致由于 timestamp 邊界而無法選擇事件。

from sentry.testutils.helpers.datetime import before_now
from sentry.utils.samples import load_data

def test_query(self):
data = load_data("python", timestamp=before_now(minutes=1))
event = self.store_event(data, project_id=self.project.id)

設置選項和功能標志

如果您的測試是針對帶有功能標記的端點,或者需要設置特定選項。您可以使用輔助方法將配置數據更改為正確的狀態:

def test_success(self):
with self.feature('organization:new-thing'):
with self.options({'option': 'value'}):
# Run test logic with features and options set.

# Disable the new-thing feature.
with self.feature({'organization:new-thing': False}):
# Run you logic with a feature off.

外部服務

使用 responses 庫為您的代碼發出的出站 API 請求添加存根響應。這將幫助您相對輕松地模擬成功和失敗的場景。

可靠地使用時間

在編寫與攝取事件相關的測試時,我們必須在事件的約束內操作不能超過 30 天。因為所有事件都必須是最近的,所以我們不能使用傳統的時間凍結策略在測試中獲得一致的數據。我們不是選擇任意的時間點,而是從現在開始向后工作,并且有一些輔助函數可以這樣做:

from sentry.testutils.helpers.datetime import before_now, iso_format

five_min_ago = before_now(minutes=5)
iso_timestamp = iso_format(five_min_ago)

這些函數生成 datetime 對象,以及相對于當前的 ISO 8601 格式的 datetime 字符串, 使您能夠在已知時間偏移處擁有事件,而不會違反 relay 強加的 30 天限制。

在測試中檢查 SQL 查詢

將以下內容添加到項目根目錄中的 conftest.py 中:

import itertools
from django.conf import settings
from django.db import connection, connections, reset_queries
from django.template import Template, Context

@pytest.fixture(scope="function", autouse=True)
def log_sql():
reset_queries()
settings.DEBUG = True

yield

time = sum([float(q["time"]) for q in connection.queries])
t = Template(
"{% for sql in sqllog %}{{sql.sql|safe}}{% if not forloop.last %}\n\n{% endif %}{% endfor %}"
)
queries = list(itertools.chain.from_iterable([conn.queries for conn in connections.all()]))
log = t.render(Context({"sqllog": queries, "count": len(queries), "time": time}))
print(log)

現在,在測試期間執行的所有 SQL 都將打印到標準輸出。建議使用 pytest 的 -k 選擇器縮小輸出范圍。另請注意,您需要通過 -s 來查看標準輸出。

驗收測試

我們的驗收測試利用 selenium 和 chromedriver 來模擬用戶使用前端應用程序和整個后端堆棧。我們在 Sentry 使用驗收測試有兩個目的:

涵蓋僅通過端點測試或僅使用 Jest 無法涵蓋的工作流程。

通過我們的視覺回歸 GitHub Actions 為視覺回歸測試準備快照。

驗收測試可以在 tests/acceptance 中找到,并使用 pytest 在本地運行。

運行驗收測試

當您運行驗收測試時,webpack 將自動運行以構建靜態資資源。如果您在創建或修改驗收測試時更改 Javascript 文件, 則每次更改后都需要 rm .webpack.meta 以觸發靜態資源的重建。

# 運行單個驗收測試。
pytest tests/acceptance/test_organization_group_index.py \
-k test_with_onboarding

# 運行帶有頭的瀏覽器,以便您可以觀看它。
pytest tests/acceptance/test_organization_group_index.py \
--no-headless=true \
-k test_with_onboarding

# 打開每個 snapshot image
SENTRY_SCREENSHOT=1 VISUAL_SNAPSHOT_ENABLE=1 \
pytest tests/acceptance/test_organization_group_index.py \
-k test_with_onboarding

如果您看到:

WARNING: Failed to gather log types: Message: unknown > command: Cannot call non W3C standard command while in W3C mode

則表示 Webpack 未正確編譯資源。

定位元素

因為我們使用 emotion,所以我們的類名通常對瀏覽器自動化沒有用。相反,我們自由地使用 data-test-id 屬性來定義瀏覽器自動化和 Jest 測試的 hook 點。

處理異步動作

我們所有的數據都異步加載到前端,驗收測試需要考慮各種延遲和響應時間。我們傾向于使用 selenium 的 wait_until* 特性來輪詢 DOM,直到元素出現或可見。我們不使用 sleep()。

視覺回歸

像素很重要,因此我們使用視覺回歸來幫助捕捉 Sentry 渲染方式的意外變化。在驗收測試期間,我們捕獲屏幕截圖并將您的拉取請求中的屏幕截圖與批準的基線進行比較。

雖然我們對視覺回歸有相當廣泛的覆蓋,但仍有一些重要的盲點:

懸停(Hover)卡片與懸停狀態

模態窗口

圖表和數據可視化

所有這些組件和交互通常不包含在可視化快照中,您在處理其中任何一個時都應該小心。

處理不斷變化的數據

因為視覺回歸比較圖像快照,而且我們數據的很大一部分處理時間序列數據, 所以我們經常需要用 'fixed' 數據替換基于時間的內容。您可以使用 getDynamicText 幫助程序為依賴于當前時間或變化 過于頻繁而無法包含在可視快照中的組件/數據提供固定內容。

Jest 測試

我們的 Jest 套件涵蓋為前端組件提供功能和單元測試。我們更喜歡編寫與組件交互并觀察結果(導航、API 調用)的功能測試, 而不是檢查 prop 傳遞和 state 突變。請參閱 Frontend Handbook 了解更多 Jest 測試技巧。

??https://develop.sentry.dev/frontend/#testing??

# Run jest in interactive mode
yarn test

# Run a single test
yarn test tests/js/spec/views/issueList/overview.spec.js

API Fixtures

因為我們的 Jest 測試在沒有 API 的情況下運行, 所以我們有各種 fixture 構建器可用于幫助生成 API 響應有效負載。 TestStubs 全局包括 tests/js/sentry-test/fixtures/ 中的所有 fixture 函數。

您還應該使用 MockApiClient.addMockResponse() 來設置您的組件將進行的 API 調用的響應。未能模擬端點將導致測試失敗。

CI 中的 Kafka 測試

Snuba 測試套件 (.github/workflows/snuba-integration-test.yml) 是唯一真正讓 Kafka 在 CI 中運行的測試套件。如果您有一個需要 Kafka 運行的測試,那么這些測試需要嵌套在 Snuba 測試文件夾 (tests/snuba/) 下。如果不這樣做,您的測試將超時并在 GH actions 中被取消。

責任編輯:武曉燕 來源: 黑客下午茶
相關推薦

2022-01-11 20:42:54

開發Sentry標志

2022-01-17 19:34:43

SentryWeb APISentry API

2022-01-15 23:33:47

SentryPyCharm配置

2022-01-02 23:26:08

開發SDK Sentry

2021-12-15 20:06:48

ReactJSSentry開發者

2022-01-21 21:33:03

開發JavaScript應用

2021-12-25 22:31:55

Sentry 監控SDK 開發 性能監控

2022-01-19 19:49:53

Sentry瀏覽器SDK

2022-01-16 22:16:59

數據庫Sentry開發者

2022-01-13 20:13:31

元宇宙搜索引擎

2022-01-03 22:59:30

開發SDK數據

2021-12-31 18:35:40

監控Sentry開發

2022-01-02 06:59:43

SentrySDK 開發客戶端報告

2021-12-16 20:12:37

后端開發Sentry

2022-01-20 19:49:10

Sentry開發Scope

2021-12-17 19:15:51

前端蟲洞狀態

2015-07-22 16:08:46

OpenStack開源貢獻代碼

2018-03-27 23:25:40

Paddle

2015-07-20 09:16:42

iOSWatchKit開發

2011-07-07 10:50:09

Cocoa 框架
點贊
收藏

51CTO技術棧公眾號

99久久免费精品高清特色大片| 毛片在线看网站| 亚洲一级黄色| 精品五月天久久| 久久网站免费视频| 欧美日韩视频在线播放| 成人丝袜视频网| 国产91色在线|| 欧美在线视频第一页| 欧美重口另类| 欧美高清视频一二三区 | 国内精品美女在线观看 | 国产成人福利在线| 国产一区二区三区| 日韩欧美一区二区在线| 小说区视频区图片区| 日韩一级中文字幕| 国内一区二区在线| 国产精品99一区| 精品无码人妻一区二区三| 国内精品久久久久久99蜜桃| 日韩视频在线观看一区二区| 国产精品无码专区av在线播放| 动漫一区在线| 中文字幕精品一区二区三区精品| 国产在线资源一区| 国产乱色精品成人免费视频| 亚洲久久一区二区| 美女av一区二区| 国产伦理片在线观看| theporn国产在线精品| 欧美美女一区二区在线观看| 日本一本二本在线观看| 波多野结衣在线观看| 亚洲特黄一级片| 麻豆av一区二区三区久久| 亚洲经典一区二区| 国产综合色视频| 国产免费一区二区三区在线能观看| 日韩成年人视频| 国产精品va| 九色精品免费永久在线| 免费黄色国产视频| 欧美日韩中文一区二区| 亚洲欧美国产视频| 精品无码在线视频| 色爱综合av| 国产视频在线一区二区| 亚洲最大的黄色网| 久久精品色播| 亚洲精品美女在线| 野花社区视频在线观看| 日韩高清在线免费观看| 亚洲国语精品自产拍在线观看| 911亚洲精选| 风间由美一区二区av101| 欧美成人一区二区三区在线观看 | 国产午夜精品视频免费不卡69堂| 国产黄色网址在线观看| 亚洲福利网站| 亚洲视频第一页| jizz中文字幕| 99久久久久国产精品| 日韩视频免费看| 日本中文在线视频| 国产一在线精品一区在线观看| 欧美日韩福利在线观看| 国产无码精品一区二区| 亚洲乱码视频| 日韩免费av在线| 中国a一片一级一片| 久久99精品久久久| 国产91aaa| 免费国产在线视频| 中文av一区二区| 99精品一级欧美片免费播放| 免费不卡av| 欧美性猛交xxxx免费看| 污版视频在线观看| 精品国产亚洲一区二区在线观看| 日韩欧美的一区| 波多野结衣有码| 精品一区av| 麻豆乱码国产一区二区三区| 亚洲精品在线观看av| 裸体素人女欧美日韩| 国产有码在线一区二区视频| 精品久久久免费视频| 99久久99久久免费精品蜜臀| 品久久久久久久久久96高清| 日本在线人成| 亚洲成va人在线观看| 久久久精品麻豆| 亚洲视频一起| 亚洲视频在线观看| 538精品在线观看| 亚久久调教视频| 91久久精品在线| 四虎在线视频| 亚洲激情在线播放| 美女黄色片视频| 国产精品网址| xxx一区二区| 中文字幕亚洲乱码熟女1区2区| 久久精品理论片| 久久人人九九| 欧美人与牲禽动交com | 8x拔播拔播x8国产精品| 一区二区 亚洲| 成人一区二区三区在线观看| 亚洲国产精品日韩| 日本不卡网站| 日韩视频一区在线观看| 1024手机在线观看你懂的| 狠狠综合久久av一区二区老牛| 国产精品爽黄69天堂a| 污视频在线免费观看| 亚洲欧美另类小说视频| www.激情小说.com| 窝窝社区一区二区| 久久久久久综合网天天| 国产农村老头老太视频| 欧美国产一区二区| 国产亚洲综合视频| 国产厕拍一区| 久久久久久成人精品| 91麻豆一区二区| 国产女人18毛片水真多成人如厕| 黄色一级视频在线播放| 亚洲精品在线播放| 欧美成人精品在线播放| 国产又粗又猛又黄又爽无遮挡 | 亚洲区一区二区三| 免费不卡在线视频| 日韩在线第一区| 毛片无码国产| 国产视频一区在线| www欧美在线| www.日韩大片| 妞干网在线视频观看| 亚洲精品观看| 欧美黑人极品猛少妇色xxxxx| 国产精品永久久久久久久久久| 国产精品视频一二三区| 九九热在线免费| 日韩精品一区二区久久| 国产精品美女在线| 日本亚洲精品| 欧美日韩亚洲综合一区二区三区| 亚洲黄色小说视频| 日韩激情在线观看| 欧美一区二区在线| 成人精品三级| 日韩网站免费观看| 国产视频在线观看视频| 亚洲精品久久久蜜桃| 中文字幕无码毛片免费看| 欧美激情五月| 国模一区二区三区私拍视频| 国产高潮在线| 精品国产伦一区二区三区免费| 久久香蕉精品视频| 99久久精品国产毛片| 中文字幕乱码人妻综合二区三区 | 成人小视频在线观看免费| 午夜久久av| 性欧美视频videos6一9| 人人九九精品| 欧美图区在线视频| 91麻豆免费视频网站| 成人免费视频一区二区| 91猫先生在线| 日韩成人影院| 亚洲一区二区三| 国产精品一二三产区| 亚洲区免费影片| 91欧美日韩麻豆精品| 亚洲一区日韩精品中文字幕| 亚洲欧美日本一区| 久久成人麻豆午夜电影| 国产玉足脚交久久欧美| 综合亚洲自拍| 91中文字幕在线| 松下纱荣子在线观看| 中文字幕久热精品在线视频| 国产成人精品免费看视频| 精品欧美一区二区三区| 五月婷婷六月香| 成人激情免费网站| 亚洲黄色小视频在线观看| 欧美另类视频| 日韩一区国产在线观看| 国产精品45p| 国产精品揄拍500视频| 国模私拍视频在线播放| 国产一区二区三区在线播放免费观看 | 欧美少妇一区二区三区| 久久悠悠精品综合网| 国产噜噜噜噜噜久久久久久久久| 丁香花高清在线观看完整版| 国产午夜精品一区二区三区| 全部免费毛片在线播放一个| 欧美日韩精品一区二区三区 | 热久久久久久久| 2022中文字幕| jiujiure精品视频播放| 激情小说网站亚洲综合网| 欧美一级做a| 日本欧美一级片| 美女航空一级毛片在线播放| 色哟哟亚洲精品一区二区| 手机看片一区二区| 日韩欧美精品在线视频| 中文字幕精品一区二| 欧美日韩在线视频观看| 国产一级片免费看| 最新高清无码专区| 日本成人午夜影院| 26uuu精品一区二区三区四区在线| 中文字幕日韩久久| 日本不卡高清视频| 日韩精品一区二区三区不卡| 欧美色一级片| 男女爱爱视频网站| 国产精品久久观看| 亚洲狠狠婷婷综合久久久| 久久99视频| 欧美xxxx黑人又粗又长精品| 国内精品免费| 国产精品伊人日日| 中文字幕日韩高清在线| 成人av男人的天堂| 精品欧美视频| www.久久草| 亚洲网一区二区三区| 亚洲一区二区免费| 国产一区二区三区国产精品| 国产美女久久精品香蕉69| 国产极品一区| 国产欧美日韩中文字幕在线| 欧美精选视频一区二区| 日韩av电影在线网| 亚洲天堂一区二区| 国产精品777| 国产精品美女午夜爽爽| 国产免费一区二区三区在线能观看| 99精品国自产在线| 成人黄色片网站| 欧美日本三级| 风间由美一区二区三区| www.国产精品一区| 久久精精品视频| 国产成人三级| 亚洲欧洲另类精品久久综合| 欧美激情另类| 9色视频在线观看| 激情综合视频| 日韩视频第二页| 青青草97国产精品免费观看无弹窗版 | 欧美性高清videossexo| 中文字幕免费播放| 欧美美女bb生活片| 亚洲精品第五页| 日韩毛片中文字幕| 91精彩视频在线播放| 不卡av在线播放| 七七久久电影网| 欧美一级视频在线观看| 97人人做人人爽香蕉精品| 91在线观看免费高清完整版在线观看| 一区二区网站| 欧美激情视频一区二区三区| 欧美亚洲国产精品久久| 日本老太婆做爰视频| 一区二区三区福利| 在线免费av播放| 成人免费观看av| 小早川怜子久久精品中文字幕| 18成人在线视频| 免费观看成人毛片| 91精品黄色片免费大全| 天堂网av2014| 中文字幕在线精品| 国产91足控脚交在线观看| 国产精彩精品视频| 久久精品一级| 欧美精品一区在线发布| 91精品电影| 日韩精品一区二区三区色欲av| 国产综合久久久久影院| 李宗瑞91在线正在播放| 亚洲伦在线观看| 久操视频在线免费观看| 日韩欧美中文一区| 成人精品福利| 亚洲91av视频| 国产区一区二| 日韩av影视| 最新国产拍偷乱拍精品 | 成人性生交大片免费看中文网站| 国产精品扒开腿做爽爽| 一区二区三区成人在线视频| 日韩不卡高清视频| 欧美精品一区二区三区在线播放 | 激情在线观看视频| 久久久99免费| 日韩aaaaaa| 日韩视频不卡中文| 色综合久久影院| 国产成人啪精品视频免费网| 成人爽a毛片| 国产卡一卡二在线| 免费国产亚洲视频| 中文字幕av网址| 香蕉久久一区二区不卡无毒影院| 国产精品一区二区黑人巨大 | 永久免费看片视频教学| 欧美在线视频全部完| 手机看片1024日韩| 久久久久久中文字幕| 中文字幕亚洲在线观看| www.午夜色| 久久精品国内一区二区三区| 蜜桃无码一区二区三区| 黑人巨大精品欧美一区二区| 国产av无码专区亚洲a∨毛片| 中文字幕国内精品| 日本美女一区| 欧美久久久久久| 西西裸体人体做爰大胆久久久| 国产精品久久久久久在线观看| 亚洲精品视频免费看| 国产精选久久久| 美女999久久久精品视频| 美国十次综合久久| 青少年xxxxx性开放hg| 黄色精品一二区| 中文字幕在线观看2018| 91精品在线免费观看| 久操视频在线免费播放| 91精品中文在线| 一本精品一区二区三区| 两性午夜免费视频| 樱花草国产18久久久久| 亚洲av无码国产综合专区| 欧美第一黄网免费网站| av一级亚洲| 国产69精品久久久久999小说| av不卡在线播放| 久久久久久少妇| 亚洲午夜激情免费视频| 国产69精品久久久久按摩| 一区二区三区四区欧美| 国产一区二区在线电影| 久久久久久久久久久97| 欧美精品一区二区三| 在线观看福利电影| 日韩国产高清一区| 精品在线观看视频| 欧美成人黄色网| 亚洲国产精品va| 午夜欧美巨大性欧美巨大 | 欧美日韩国产综合一区二区三区| 欧美尤物美女在线| av日韩中文字幕| 亚洲女优在线| 久久久久99精品成人| 91精品国产欧美一区二区18| 手机在线免费av| 噜噜噜噜噜久久久久久91| 捆绑调教美女网站视频一区| 免费在线观看h片| 日韩av综合网| 欧美特黄色片| 成品人视频ww入口| 国产嫩草影院久久久久| 国产浮力第一页| 91精品国产91久久久| 日韩精品不卡一区二区| 三上悠亚 电影| 色悠久久久久综合欧美99| 午夜激情视频在线观看| 精品国产一区二区三区麻豆小说 | 无码人妻久久一区二区三区| 精品国产欧美一区二区三区成人| 91久久精品无嫩草影院| 粉嫩虎白女毛片人体| 亚洲乱码中文字幕综合| 免费理论片在线观看播放老| 91手机视频在线观看| 国产日韩亚洲| 欧美成人三级视频| 中文字幕日韩av电影| a级日韩大片| 老司机午夜性大片| 欧美日韩激情网| 色女人在线视频| 一本久久a久久精品vr综合| 91最新地址在线播放| 99久久久久成人国产免费|