Di sini di sini Anda dapat membaca bagian 1 dari artikel ini.Pada Bagian 2, kita akan berbicara tentang bagaimana menyiapkan data untuk pengujian stres menggunakan alat dc-app-performance-toolkit .Mempersiapkan data uji
Ada dua cara untuk menyiapkan data uji:- Gunakan cadangan yang disediakan oleh Atlassian. Anda dapat menggunakan opsi ini jika, misalnya, Anda menulis plugin sendiri dan tidak masalah bagi Anda data apa yang akan dikerjakan plugin ini.
- Gunakan data Anda sendiri. Opsi ini akan berguna jika Anda memiliki salinan Jira, Confluence atau Bitbucket Anda sendiri, yang Anda modifikasi menggunakan fungsi standar, skrip, plugin, dan metode lain yang mungkin.
Cadangkan Atlassian
Atlassian menyediakan cadangan untuk Jira, Confluence dan Bitbucket, yang dapat digunakan untuk pengujian beban.Untuk menginstal cadangan ini, Anda harus pergi ke folder app-dc-performance-toolkit / app / util / jira jika Anda menguji Jira, app-dc-performance-toolkit / app / util / confluence jika Anda menguji Confluence atau app-dc-performance-toolkit / app / util / bitbucket jika Anda menguji Bitbucket.Folder ini berisi file yang perlu Anda jalankan untuk menginstal cadangan Atlassian. Berikut adalah deskripsi dari file-file ini:- index-sync.sh ( Jira Confluence) β atlassian-jira.log (atlassian-confluence.log) βindexes β 100%β. , . , , Jira/Confluence. , , , , , , .
- populate_db.sh β Postgres Jira/Confluence/Bitbucket.
- upload_attachments.sh β data.
- index-snapshot.sh ( Confluence) β , .
Semua skrip di atas harus dijalankan pada mesin virtual yang sama tempat instans yang akan Anda uji terinstal. Karena skrip-skrip ini dijalankan dari mesin virtual yang sama, skrip-skrip tersebut akan secara independen menentukan versi instance Anda dan mengunduh database dump dan lampiran untuk versi Anda.Nah, bagaimana jika Anda tidak ingin menggunakan Postgres? Bagaimanapun, populate_db.sh hanya berfungsi untuk database Postgres.Dalam hal ini, hanya untuk Jira Anda dapat mengunduh cadangan xml dan mengembalikannya menggunakan fungsionalitas Jira standar . Berikut ini tautan ke cadangan ini: https://centaurus-datasets.s3.amazonaws.com/jira/$ {Jira_Verson} /large/xml_backup.zip - versi Jira 8.0.3, 7.13.6, 8.5.0 yang didukung.Atlassian tidak menyiapkan cadangan xml untuk Confluence dan Bitbucket. Anda perlu menggunakan skrip populate_db.sh atau menyiapkan sendiri data tersebut, yang akan saya bahas nanti di bagian βMenggunakan data kami sendiriβ.Kami menggunakan data kami sendiri.
Jika Anda ingin menguji instance Anda pada data Anda sendiri, maka ini juga memungkinkan. Yang Anda butuhkan adalah memastikan bahwa data Anda dapat digunakan oleh alat dc-app-performance-toolkit.Ketika dc-app-performance-toolkit mulai menguji, Taurus menjalankan skrip prep-data.py, yang memilih data dari instance Anda untuk diuji. Akibatnya, beberapa file csv dengan data dari instance Anda dibuat.Jika prep-data.py tidak dapat memilih data yang diperlukan, maka pengujian akan gagal. Karena itu, Anda perlu memastikan bahwa data yang diperlukan ada dalam salinan Anda.Untuk memahami data apa yang seharusnya, Anda perlu mempelajari file prep-data.py untuk produk yang akan Anda uji.Mari kita periksa file-file ini.Jira
File prep-data.py untuk Jira terletak di folder dc-app-performance-toolkit / blob / master / app / util / data_preparation / jira / folder .Skrip ini memilih data dari Jira dan membuat file-file berikut:- issues.csv - daftar ish.
- jqls.csv - daftar pertanyaan jql.
- kanban-boards.scv - daftar panel kanban.
- project-keys.csv - daftar kunci proyek.
- scrum-boards.csv- daftar panel scrum.
- users.scv - daftar pengguna.
Kami tidak akan mempelajari file prep-data.py sepenuhnya, kami hanya perlu melihat metode ini:def __create_data_set(jira_api):
dataset = dict()
dataset[USERS] = __get_users(jira_api)
software_project_keys = __get_software_project_keys(jira_api, PROJECTS_COUNT_LIMIT)
dataset[PROJECT_KEYS] = software_project_keys
dataset[ISSUES] = __get_issues(jira_api, software_project_keys)
dataset[SCRUM_BOARDS] = __get_boards(jira_api, 'scrum')
dataset[KANBAN_BOARDS] = __get_boards(jira_api, 'kanban')
dataset[JQLS] = __generate_jqls(count=150)
return dataset
Seperti yang Anda lihat dalam metode ini, semua data yang diperlukan selama pengujian dipilih:dataset[USERS] = __get_users(jira_api)
Kami memilih pengguna dari instance Jira kami. Nama pengguna harus dimulai dengan "performance_". Kami harus memilih pengguna sebanyak yang kami tetapkan sebagai pengguna bersamaan dalam parameter concurrency di file jira.yml . Jika tidak ada pengguna yang ditemukan atau jumlahnya tidak mencukupi, maka pengguna akan dibuat. Pengguna akan memiliki awalan "performance_" dan kata sandi kata sandi.software_project_keys = __get_software_project_keys(jira_api, PROJECTS_COUNT_LIMIT)
dataset[PROJECT_KEYS] = software_project_keys
Kami memilih kunci proyek dari jenis Perangkat Lunak.__get_issues(jira_api, software_project_keys)
Kami memilih tidak lebih dari 8000 perangkat lunak dari proyek perangkat lunak yang tidak dalam status Tertutup.dataset[SCRUM_BOARDS] = __get_boards(jira_api, 'scrum')
Kami memilih tidak lebih dari 250 panel pan.dataset[KANBAN_BOARDS] = __get_boards(jira_api, 'kanban')
Kami memilih tidak lebih dari 250 panel kanban.dataset[JQLS] = __generate_jqls(count=150)
Kami menghasilkan permintaan jql dengan konten berikut: 'text ~ "abc *" ".Dengan demikian, agar pengujian dapat berjalan tanpa kesalahan, Anda perlu memastikan ketersediaan proyek Perangkat Lunak dengan papan ish dan scrum dan kanban. Jika Anda sudah memiliki objek ini dalam instance Anda, maka Anda tidak perlu melakukan apa pun (pengujian akan berhasil tanpa perubahan), jika tidak, maka Anda perlu membuat objek yang hilang.Karena instance Jira saya kosong, saya membuat proyek Pengembangan Perangkat Lunak Scrum dan Kanban Pengembangan Perangkat Lunak dan menjalankan uji beban lagi:bzt jira.yml
Kali ini skrip selesai tanpa kesalahan. Ini adalah output skrip:18:15:24 INFO: Taurus CLI Tool v1.14.0
18:15:24 INFO: Starting with configs: ['jira.yml']
18:15:24 INFO: Configuring...
18:15:24 INFO: Artifacts dir: /Users/alexm/PycharmProjects/easymigration/dc-app-performance-toolkit/app/results/jira/2020-05-02_18-15-24
18:15:24 INFO: Preparing...
18:15:25 INFO: Starting shell command: python util/environment_checker.py
18:15:25 INFO: Starting shell command: python util/data_preparation/jira/prepare-data.py
18:15:26 WARNING: There is newer version of Taurus 1.14.2 available, consider upgrading. What's new: http://gettaurus.org/docs/Changelog/
18:15:28 INFO: Will install JMeter into /Users/alexm/.bzt/jmeter-taurus/5.2.1
18:15:28 INFO: Downloading: https://apache-mirror.rbc.ru/pub/apache//jmeter/binaries/apache-jmeter-5.2.1.zip
100% [===========================================================] Time: 0:00:04
18:15:33 INFO: Unzipping /var/folders/4r/w8hkd4w51x787tw4ynb29v2w0000gn/T/tmp9g5rzqs1.zip to /Users/alexm/.bzt/jmeter-taurus/5.2.1
18:15:50 INFO: Downloading jmeter-plugins-manager-1.3.jar from https://search.maven.org/remotecontent?filepath=kg/apc/jmeter-plugins-manager/1.3/jmeter-plugins-manager-1.3.jar
18:15:51 INFO: Downloading cmdrunner-2.2.jar from https://search.maven.org/remotecontent?filepath=kg/apc/cmdrunner/2.2/cmdrunner-2.2.jar
100% [===========================================================] Time: 0:00:01
18:15:52 INFO: Installing JMeter plugins: jpgc-casutg,jpgc-dummy,jpgc-ffw,jpgc-fifo,jpgc-functions,jpgc-json,jpgc-perfmon,jpgc-prmctl,jpgc-tst,bzm-parallel=0.4,bzm-random-csv=0.6,jpgc-casutg=2.5,jpgc-dummy=0.2,jpgc-ffw=2.0,jpgc-fifo=0.2,jpgc-functions=2.1,jpgc-json=2.6,jpgc-perfmon=2.1,jpgc-prmctl=0.4,jpgc-tst=2.4,jpgc-wsc=0.3,tilln-sshmon=1.0,jpgc-cmd=2.2,jpgc-synthesis=2.2
18:16:38 INFO: 1 obsolete CookieManagers are found and fixed
18:16:56 INFO: Installing ChromeDriver...
18:16:56 INFO: Will install ChromeDriver into /Users/alexm/.bzt/selenium-taurus/tools/chromedriver/80.0.3987.106
18:16:56 INFO: Downloading: https://chromedriver.storage.googleapis.com/80.0.3987.106/chromedriver_mac64.zip
100% [===========================================================] Time: 0:00:01
18:16:57 INFO: Unzipping /var/folders/4r/w8hkd4w51x787tw4ynb29v2w0000gn/T/tmpurpp_7tz.zip to /Users/alexm/.bzt/selenium-taurus/tools/chromedriver/80.0.3987.106
18:16:57 INFO: Installing GeckoDriver...
18:16:57 INFO: Will install GeckoDriver into /Users/alexm/.bzt/selenium-taurus/tools/geckodriver/0.23.0
18:16:57 INFO: Downloading: https://github.com/mozilla/geckodriver/releases/download/v0.23.0/geckodriver-v0.23.0-macos.tar.gz
100% [===========================================================] Time: 0:00:02
18:17:00 INFO: Untaring /var/folders/4r/w8hkd4w51x787tw4ynb29v2w0000gn/T/tmpiurqzzt4.zip to /Users/alexm/.bzt/selenium-taurus/tools/geckodriver/0.23.0
18:17:00 WARNING: You are using Python 3, make sure that your scripts are able to run in Python 3
18:17:00 INFO: Starting...
18:17:00 INFO: Waiting for results...
18:17:00 INFO: Waiting for finish...
18:17:00 ERROR: Console screen failure: ord() expected string of length 1, but int found
18:25:22 WARNING: Please wait for graceful shutdown...
18:25:22 INFO: Shutting down...
18:25:22 INFO: Starting shell command: python util/jmeter_post_check.py
18:25:22 INFO: Starting shell command: python util/jtl_convertor/jtls-to-csv.py kpi.jtl selenium.jtl
18:25:59 INFO: Post-processing...
18:25:59 INFO: Test duration: 0:08:22
18:25:59 INFO: Samples count: 3272, 0.06% failures
18:25:59 INFO: Average times: total 0.595, latency 0.000, connect 0.000
18:25:59 INFO: Percentiles:
βββββββββββββββββ¬ββββββββββββββββ
β Percentile, % β Resp. Time, s β
βββββββββββββββββ΄ββββββββββββββββ
18:25:59 INFO: Request label stats:
βββββββββββββββββββββββββββββββββββββββββ¬βββββββββ¬ββββββββββ¬βββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β label β status β succ β avg_rt β error β
βββββββββββββββββββββββββββββββββββββββββΌβββββββββΌββββββββββΌβββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β jmeter_browse_boards β OK β 100.00% β 0.186 β β
β jmeter_browse_projects β OK β 100.00% β 0.149 β β
β jmeter_create_issue β OK β 100.00% β 0.135 β β
β jmeter_login_and_view_dashboard β OK β 100.00% β 0.497 β β
β jmeter_open_comment β OK β 100.00% β 0.210 β β
β jmeter_open_editor β OK β 100.00% β 0.287 β β
β jmeter_open_quick_create β OK β 100.00% β 0.063 β β
β jmeter_save_comment β OK β 100.00% β 0.521 β β
β jmeter_save_edit β OK β 100.00% β 0.900 β β
β jmeter_search_jql β OK β 100.00% β 0.610 β β
β jmeter_view_backlog β OK β 100.00% β 0.387 β β
β jmeter_view_dashboard β OK β 100.00% β 0.267 β β
β jmeter_view_issue β OK β 100.00% β 0.593 β β
β jmeter_view_kanban_board β OK β 100.00% β 0.344 β β
β jmeter_view_project_summary β OK β 100.00% β 0.611 β β
β jmeter_view_scrum_board β OK β 100.00% β 0.347 β β
β selenium_a_login β OK β 100.00% β 28.460 β β
β selenium_browse_boards_list β OK β 100.00% β 9.871 β β
β selenium_browse_projects_list β OK β 100.00% β 6.376 β β
β selenium_create_issue β OK β 100.00% β 5.143 β β
β selenium_edit_issue β OK β 100.00% β 16.305 β β
β selenium_save_comment β OK β 100.00% β 19.909 β β
β selenium_search_jql β OK β 100.00% β 32.249 β β
β selenium_view_backlog_for_scrum_board β OK β 100.00% β 14.223 β β
β selenium_view_dashboard β OK β 100.00% β 13.805 β β
β selenium_view_issue β OK β 100.00% β 12.332 β β
β selenium_view_kanban_board β OK β 100.00% β 14.675 β β
β selenium_view_project_summary β OK β 100.00% β 12.710 β β
β selenium_view_scrum_board β OK β 100.00% β 14.893 β β
β selenium_z_log_out β OK β 100.00% β 14.889 β β
βββββββββββββββββββββββββββββββββββββββββ΄βββββββββ΄ββββββββββ΄βββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
18:26:00 INFO: Writing JUnit XML report into: /Users/alexm/PycharmProjects/easymigration/dc-app-performance-toolkit/app/results/jira/2020-05-02_18-15-24/xunit.xml
18:26:00 INFO: Starting shell command: python util/analytics.py jira
18:26:06 INFO: Starting shell command: python util/cleanup_results_dir.py
18:26:06 INFO: Artifacts dir: /Users/alexm/PycharmProjects/easymigration/dc-app-performance-toolkit/app/results/jira/2020-05-02_18-15-24
18:26:06 INFO: Done performing with code: 0
Dapat dilihat dari hasil skrip bahwa Taurus meluncurkan file prep-data.py dan membuat file csv berikut:issues.csvKAN-1,10023,KAN
KAN-2,10024,KAN
KAN-3,10025,KAN
KAN-4,10026,KAN
KAN-5,10027,KAN
...........
jqls.csvtext ~ "vqz*" order by key
text ~ "fpl*" order by key
text ~ "zjs*" order by key
text ~ "wph*" order by key
text ~ "xhx*" order by key
text ~ "pxt*" order by key
text ~ "deh*" order by key
text ~ "iri*" order by key
text ~ "jbr*" order by key
text ~ "snt*" order by key
...........
kanban-boards.csv2
project_keys.csvKAN
SCRUM
scrum-boards.csv1
users.csvperformance_kqgdayqwfj,password
performance_zyqnwihaxr,password
performance_onfxfovior,password
performance_rrujzwrxlt,password
performance_agjbcxxeqy,password
Kemudian Taurus menginstal JMeter dan driver web Chrome, menjalankan tes, dan mencetak hasilnya.Sekarang mari kita lihat file prep-data.py untuk Confluence dan Bitbucket.Pertemuan
Pertimbangkan file prep-data.py untuk Confluence.Inilah metode utamanya:def __create_data_set(rest_client, rpc_client):
dataset = dict()
dataset[USERS] = __get_users(rest_client, rpc_client, CONFLUENCE_SETTINGS.concurrency)
dataset[PAGES] = __get_pages(rest_client, 5000)
dataset[BLOGS] = __get_blogs(rest_client, 5000)
return dataset
dataset[USERS] = __get_users(rest_client, rpc_client, CONFLUENCE_SETTINGS.concurrency)
Kami memilih atau membuat pengguna untuk pengujian beban sesuai dengan logika yang sama seperti dalam kasus untuk Jira.dataset[PAGES] = __get_pages(rest_client, 5000)
Kami memilih halaman dari Confluence menggunakan cql berikut: "type = halaman dan judul! ~ JMeter dan judul! ~ Selenium dan judul! ~ Home".dataset[BLOGS] = __get_blogs(rest_client, 5000)
Kami memilih blog dari Confluence dengan cql berikut: "type = blogpost dan title! ~ Performance".Jadi, untuk memulai pengujian untuk Confluence, Anda perlu memiliki halaman dan blog di salinan Anda.Bitbucket
Sekarang lihat file prep-data.py untuk Bitbucket.Inilah fungsi utamanya:def __create_data_set(bitbucket_api):
dataset = dict()
dataset[USERS] = __get_users(bitbucket_api)
dataset[PROJECTS] = __get_projects(bitbucket_api)
dataset[REPOS] = __get_repos(bitbucket_api)
dataset[PULL_REQUESTS] = __get_prs(bitbucket_api)
return dataset
dataset[USERS] = __get_users(bitbucket_api)
Kami memilih atau membuat pengguna sesuai dengan logika yang sama dengan Jira, tetapi kali ini pengguna harus memiliki awalan "dcapt-perf-user". Dan saat membuat pengguna, kata sandi sama dengan nama pengguna.dataset[PROJECTS] = __get_projects(bitbucket_api)
Kami memilih proyek.dataset[REPOS] = __get_repos(bitbucket_api)
Kami memilih repositori.dataset[PULL_REQUESTS] = __get_prs(bitbucket_api)
Kami memilih kumpulan permintaan. Jumlah kumpulan permintaan harus tidak kurang dari parameter concurrency di file bitbucket.yml .Jadi, untuk menjalankan tes untuk Bitbucket, Anda harus memiliki dalam proyek contoh Anda, repositori dan kumpulan requets dalam jumlah yang tidak kurang dari parameter concurrency dalam file bitbucket.yml.Jadi, kami melihat bagaimana menyiapkan data untuk pengujian beban menggunakan cadangan yang disiapkan oleh Atlassian, dan bagaimana menjalankan pengujian beban pada data kami. Pada bagian selanjutnya, kita akan berbicara tentang artefak apa yang dibuat setelah stress testing, informasi apa yang mereka berikan dan gambar apa yang dapat kita hasilkan dari kotak.