Rumah > Artikel > pembangunan bahagian belakang > Amalan ujian tekanan APM bilik siaran langsung pelanggan Dewu
Dengan perkembangan pesat industri siaran langsung, semakin banyak syarikat terlibat dalam bidang ini Kestabilan dan pengalaman pengguna bilik siaran langsung telah menjadi faktor penting persaingan platform siaran langsung. Walau bagaimanapun, memandangkan bilik siaran langsung melibatkan banyak pautan teknikal yang kompleks, seperti penghantaran video, komunikasi rangkaian, pemprosesan data, dll., ujian tekanan prestasi bilik siaran langsung adalah amat penting. Dalam amalan ujian tekanan di bilik siaran langsung pelanggan, teknologi ujian tekanan APM ialah kaedah ujian prestasi yang biasa digunakan Melalui pemantauan masa nyata dan diagnosis prestasi aplikasi, kesesakan prestasi boleh dikesan dan diselesaikan dengan cepat, dan kestabilan siaran langsung. bilik penyiaran boleh dipertingkatkan dan pengalaman pengguna.
Adalah dapat dilihat bahawa ujian tekanan APM adalah sangat penting untuk memastikan kestabilan bilik siaran langsung, meningkatkan pengalaman pengguna, menemui kesesakan sistem dan mengoptimumkan prestasi sistem.
Ringkasnya, melalui kaedah ujian tekanan seperti ujian beban, ujian lebar jalur, ujian prestasi, ujian keselamatan dan ujian kebolehpercayaan, prestasi dan kestabilan bilik siaran langsung boleh keselamatan, keselamatan dan kebolehpercayaan dinilai secara menyeluruh untuk memastikan bilik siaran langsung dapat memenuhi keperluan dan jangkaan pengguna.
Kaedah ujian tekanan utama yang digunakan dalam Bilik Siaran Langsung Dewu ialah ujian beban dan ujian prestasi.
Pertama sekali, matlamat ujian tekanan kami ialah [ujian tekanan prestasi IM berdasarkan bilik siaran langsung]. tujuan utama ujian tekanan adalah untuk memantau Apabila bilik siaran langsung pada pelanggan menerima sejumlah besar mesej IM untuk masa yang lama, adakah masalah prestasi seperti ketinggalan, ranap atau OOM akan berlaku? Jalankan pusingan ujian tekanan sebelum setiap keluaran untuk mendedahkan isu prestasi dalam bilik siaran langsung di luar talian terlebih dahulu untuk mengelakkan isu prestasi dibawa dalam talian.
Dari segi kaedah ujian tekanan khusus, kami berharap dapat memenuhi syarat berikut:
Berdasarkan keperluan di atas, semasa meneroka kaedah ujian tekanan, kumpulan perniagaan siaran langsung kami mungkin telah melalui tiga peringkat berikut:
Peringkat pertama ujian tekanan bilik siaran langsung agak mudah Skrip digunakan untuk mensimulasikan pengguna menghantar komen, suka, dsb. IM ke bilik yang perlu diuji tekanan. Anda perlu menulis sendiri kod python yang sepadan dan menghantar mesej IM yang sepadan ke bilik siaran langsung Berikut adalah sebahagian daripada skrip Python:
class APIUtils: """ 仅适用于测试环境 """ @staticmethod def token(user_id: int): resp = requests.get('https://xxxx.com', params={'user_id': user_id}) return resp.json().get('token') @staticmethod def change_rc_im(user_id: int): try: im_info = requests.post( 'http://xxxx.com', headers={'userId': '1'}, data={'kolUserId': user_id} ) im_id = im_info.json().get('data', {}).get('list', [{}])[0].get('id', 0) requests.post( 'http://xxxx.com', headers={'userId': '1'}, data={'kolUserId': user_id, 'id': im_id} ) except: pass time.sleep(3) data = { "startTime": int(time.time()) + 1, "endTime": int(time.time()) + 600 * 6, "kolUserId": user_id, "imSwitch": 1, "id": 0 } requests.post('xxxx.com', headers={'userId': '1'}, data=data) @staticmethod def get_topic(user_id: int, room_id: int): """ 获取房间号 """ headers = { 'POIZON-USERID': str(user_id), 'POIZON-ISGUEST': 'false', 'platform': 'iPhone', 'v': '4.78.0' } try: resp = requests.get('xxxx.com', headers=headers, params={'roomId': room_id}) return resp.json().get('data').get('room').get('imInfo').get('chatRoomId') except Exception as e: raise e
Proses utama adalah seperti berikut:
Ujian tekanan dilaksanakan dengan cara ini adalah agak mudah. , juga boleh merangkumi beberapa mesej IM penting, tetapi ia juga mempunyai beberapa kelemahan yang jelas:
Dalam fasa ini, kami fokus untuk menyelesaikan masalah yang tinggal dari fasa sebelumnya Untuk masalah mendapatkan ID bilik , ini hanya perlu dilakukan selepas Hanya sediakan antara muka senarai siaran yang sepadan pada klien Persoalannya ialah bagaimana untuk membuat proses ujian tekanan lebih mudah untuk beroperasi? Di sini kita memikirkan visualisasi Bukankah sangat mudah untuk dapat melakukan ujian tekanan dengan hanya satu klik tetikus? Jadi berdasarkan teknologi bahagian hadapan, kami menggunakan Vue3 untuk membina halaman operasi mesej IM yang mudah Anda boleh memilih bilik dan nombor IM yang anda mahu hantar pada antara muka visual ini Semasa membuat alat ini, kami memperkayakan beberapa logik untuk menghantar mesej IM . Ia boleh diperibadikan untuk keutamaan mesej, mesej bilik atau mesej seluruh tapak, dan dengan cara itu, ia telah melakukan beberapa kerja untuk penyahpepijatan olok-olok IM.
Kemudian atas dasar ini, antara muka penyahpepijatan memberitahu bahagian belakang bilik yang perlu diuji tekanan, dan kemudian biarkan bahagian belakang memanggilnya Skrip peringkat pertama pergi ke ujian tekanan bilik yang sepadan.
Kaedah ini menjimatkan masalah mendapatkan ID bilik secara manual sendiri dan menjadikan platform Mock visual ini sebagai Fungsi olok-olok IM ditambah pada masa itu mempunyai sedikit kaitan dengan ujian tekanan Ia pada asasnya sama dengan kaedah ujian tekanan yang dilaksanakan oleh skrip.
4.3 Fasa ketigaFasa ini menyelesaikan baki masalah liputan jenis mesej di atas dengan lelaran fungsi, dan pada masa yang sama, untuk membebaskan lagi campur tangan manual , automasi berdasarkan Teslalab Platform menggunakan skrip UI untuk menjalankan fungsi ujian tekanan kami secara kerap, merealisasikan fungsi ujian tekanan yang benar-benar automatik. Operasi khusus setiap langkah diterangkan di bawah
4.3.1 Liputan jenis mesejSetiap jenis mesej IM pada klien mempunyai mesej IM yang sepadan Kelas Java, setiap kali jenis mesej IM ditambah, akan ada kelas entiti yang sepadan dengannya kelas ini semuanya diwarisi daripada kelas asas BaseLiveChatMessage, jadi kami menambah kaedah abstrak antara muka dalam BaseLiveChatMessage untuk menjana data palsu jenis mesej ini.
那么我们在新加IM数据的时候,继承BaseLiveChatMessage,就需要强制覆盖这个方法,去生成自己的mock消息,非常好的解决了维护性的问题,因为不覆盖这个mock方法是无法通过编译的。
下面是警告消息和抽奖消息的Mock代码:
有了上面的基础,在测试工程里面加一个IMTest测试类,主要逻辑是扫描所有继承BaseLiveChatMessage类的子类,然后反射构造函数,调用mock接口即可获取到相应IM类的mock消息实体,伪代码如下:
//获取BaseLiveChatMessage子类 if (allSubClass == null) { allSubClass = ClassUtils.getAllSubClass(BaseApplication.getInstance(), BaseLiveChatMessage::class.java) val iterator = allSubClass?.iterator() while (iterator?.hasNext() == true) { val next = iterator.next() try { next.getDeclaredMethod("mock", Int::class.java) } catch (e: NoSuchMethodException) { } } } // .... allSubClass?.forEach { val o = constructorMap[it]?.newInstance() as BaseLiveChatMessage var message: BaseLiveChatMessage? = null message = o.mock(0) justPostIM(message) //发送IM }
之后的压测就是控制发送频率、压测时间即可实现本地的压测,无需依赖服务端实现。
到此为止,基本已经解决了文章最开始的几个问题,IM消息的覆盖率和可维护性也得到了保证。
在现有的基础上,为了使得压测更加自动化,我们接入了Teslab自动化测试平台,可以定时启动自动化UI脚本,提升压测效率,自动化脚本是基于UiAutomator,语法非常简易,维护成本很低。
综上,第三阶段的压测策略通过客户端发起的方式,实现了IM压测使用方式方便、支持多设备压测和压测指标有记录的目标。同时,我们还需要在实际实施过程中不断优化和改进,以进一步提高压测效率和结果的可靠性。
压测流程图:
压测只是一个手段,最重要的是发现问题,解决问题,通过三个阶段的压测也发现了不少问题。
Melalui tiga peringkat ujian tekanan, pasukan itu berjaya menemui dan menyelesaikan beberapa isu iOS. Antaranya, perkara yang paling penting ialah apabila ujian tekanan berlangsung selama lebih daripada 20 minit, CPU adalah luar biasa tinggi dan antara muka tersekat. Selepas penyiasatan, didapati masalah itu berpunca daripada pengedaran mesej ke lapisan perniagaan satu demi satu, mengakibatkan penggunaan CPU yang berlebihan dan penyegaran semula UI yang terlalu kerap (sehingga berpuluh-puluh kali sesaat). Untuk menangani masalah ini, pasukan menggunakan dua penyelesaian: satu adalah untuk mengedarkan kumpulan mesej ke lapisan perniagaan melalui pemasa dan bukannya mengedarkan mesej satu demi satu ialah melakukan penukaran benang dalam pemasa untuk memastikan bahawa terdapat hanya satu penukaran benang dalam tempoh masa.
Selain itu, pasukan juga menemui situasi OOM yang disebabkan oleh peningkatan memori yang berterusan semasa ujian tekanan Sebabnya ialah sesetengah IM mempunyai masa pelaksanaan animasi dan hanya akan dilaksanakan sekali dalam satu tempoh masa. Dalam kes konkurensi, ia akan terus terkumpul dan menyebabkan limpahan memori. Untuk menyelesaikan masalah ini, pasukan menggunakan penyelesaian pengoptimuman untuk pelaksanaan animasi untuk mengelakkan limpahan memori.
Selain itu, melalui komponen kylin, pasukan juga menemui beberapa masalah kebocoran memori dan menyelesaikannya dalam masa untuk memastikan kestabilan dan kebolehpercayaan aplikasi siaran langsung. Ringkasnya, melalui tiga peringkat ujian tekanan, pasukan berjaya menemui dan menyelesaikan pelbagai masalah, yang bukan sahaja meningkatkan prestasi dan kestabilan aplikasi, tetapi juga memberikan pengalaman dan inspirasi berguna untuk pengumpulan dan pembangunan teknologi pasukan.
Ujian tekanan prestasi sememangnya merupakan cara penting untuk memastikan operasi bilik siaran langsung yang stabil dan cekap, tetapi kami tidak boleh menganggapnya sebagai penamat titik pembangunan kod. Kod yang baik harus boleh diselenggara oleh seluruh pasukan Kebolehbacaan, kebolehselenggaraan dan kebolehskalaan kod adalah sama penting. Hanya dengan memfokuskan secara berterusan pada kualiti kod dan kerjasama pasukan semasa proses pembangunan dan penyelenggaraan, bilik siaran langsung boleh terus menyediakan perkhidmatan berkualiti tinggi kepada pengguna.
Semasa menjalankan ujian tekanan prestasi dalam bilik siaran langsung, anda juga perlu memberi perhatian kepada kebolehbacaan dan kebolehselenggaraan kod. Kita harus mewujudkan mekanisme semakan kod yang ketat untuk memantau dan mengawal kualiti kod bagi memastikan kebolehpercayaan dan kebolehskalaan kod. Pada masa yang sama, kami menumpukan pada kerjasama pasukan dan mewujudkan mekanisme komunikasi dan kerjasama dalam pasukan supaya ahli pasukan dapat bersama-sama mengekalkan bilik siaran langsung dan memberikan pengalaman pengguna yang lebih baik.
Atas ialah kandungan terperinci Amalan ujian tekanan APM bilik siaran langsung pelanggan Dewu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!