એકમ પરીક્ષણમાં સંદર્ભ-આધારિત ધ્વજ મૂલ્યાંકનમાં નિપુણતા મેળવવી
યુનિટ ટેસ્ટિંગ એ વિશ્વસનીય સોફ્ટવેર ડેવલપમેન્ટનો પાયાનો પથ્થર છે, પરંતુ LaunchDarkly જેવા તૃતીય-પક્ષ સાધનોને એકીકૃત કરવાથી અનન્ય પડકારોનો પરિચય થઈ શકે છે. એક સામાન્ય દૃશ્યમાં ફીચર ફ્લેગ્સથી પ્રભાવિત કોડ પાથનું પરીક્ષણ સામેલ છે. જ્યારે તમને ટેસ્ટ કેસોમાં અલગ-અલગ ફ્લેગ વેલ્યુની જરૂર હોય, ત્યારે સંદર્ભને ચોકસાઇ સાથે ગોઠવવું જરૂરી બની જાય છે. 🎯
આ માર્ગદર્શિકામાં, અમે એકમ પરીક્ષણો દરમિયાન લૉન્ચડાર્કલી ધ્વજની વર્તણૂકને નિયંત્રિત કરવાના વિશિષ્ટતાઓમાં ડાઇવ કરીએ છીએ. કલ્પના કરો કે ધ્વજ સેટ કરવાની જરૂર છે સાચું તમામ ટેસ્ટ કેસો માટે, એક સિવાય. આ હાંસલ કરવા માટે યોગ્ય સંદર્ભ લક્ષણોની રચના કરવી એ ચાવી છે, છતાં શ્રેષ્ઠ સેટઅપ શોધવું એ ભુલભુલામણી નેવિગેટ કરવા જેવું લાગે છે.
સમજાવવા માટે, એક કાલ્પનિક દૃશ્યનો વિચાર કરો જ્યાં ઉત્પાદન સુવિધા "બીટા ટેસ્ટર" તરીકે ફ્લેગ કરેલા વપરાશકર્તાઓ માટે અક્ષમ રહેવી જોઈએ, જ્યારે અન્ય દરેક માટે સક્ષમ હોય. આ ઝીણવટભરી આવશ્યકતા માત્ર મજબૂત પરીક્ષણ ડેટા અને ફ્લેગ ભિન્નતા બનાવીને જ પરિપૂર્ણ કરી શકાય છે જે આ શરતોનો આદર કરે છે.
વાસ્તવિક-વિશ્વના ઉદાહરણ પર જઈને, અમે એકમ પરીક્ષણોમાં OpenFeature સાથે LaunchDarkly's SDK નો ઉપયોગ કરવા માટેના પડકારો અને ઉકેલોને અનપૅક કરીશું. વ્યવહારુ પગલાઓ અને હાથ પરના ઉદાહરણો સાથે, તમે સંદર્ભ-આધારિત ધ્વજ મૂલ્યાંકનની કળામાં નિપુણતા પ્રાપ્ત કરશો અને તમારી પરીક્ષણ કુશળતાને આગલા સ્તર પર લઈ જશો. 🚀
આદેશ | ઉપયોગનું ઉદાહરણ |
---|---|
ldtestdata.DataSource() | આ LaunchDarkly ફ્લેગ મૂલ્યાંકનનું અનુકરણ કરવા માટે પરીક્ષણ ડેટા સ્રોતને પ્રારંભ કરે છે. તે પરીક્ષણ હેતુઓ માટે પ્રોગ્રામેટિક રીતે ફ્લેગ રૂપરેખાંકનો બનાવવા અને સંશોધિત કરવાની મંજૂરી આપે છે. |
VariationForKey() | આપેલ સંદર્ભ કી અને મૂલ્ય માટે ચોક્કસ ફ્લેગ ભિન્નતા (સાચું કે ખોટું) વ્યાખ્યાયિત કરે છે. આનો ઉપયોગ વિશિષ્ટ પરીક્ષણના કેસોને હેન્ડલ કરવા માટે થાય છે જ્યાં ધ્વજને વિશિષ્ટ લક્ષણોના આધારે અલગ રીતે વર્તવાની જરૂર હોય છે. |
FallthroughVariation() | જ્યારે કોઈ ચોક્કસ શરતો અથવા લક્ષ્યો મેળ ખાતા નથી ત્યારે ડિફૉલ્ટ ફ્લેગ ભિન્નતા સેટ કરે છે. તે ધ્વજ મૂલ્યાંકન માટે ફોલબેક વર્તનની ખાતરી કરે છે. |
ContextBuild() | વપરાશકર્તા વિશેષતાઓ અને અનામી ફ્લેગ્સ સહિત ફ્લેગ મૂલ્યાંકન માટે વિગતવાર સંદર્ભ બનાવવા માટે વપરાય છે. ગતિશીલ વપરાશકર્તા-આધારિત પરીક્ષણ દૃશ્યો માટે આ ચાવીરૂપ છે. |
NewEvaluationContext() | ફ્લેગોનું મૂલ્યાંકન કરવા માટે એક સંદર્ભ બનાવે છે. તે પરીક્ષણ માટે "પ્રકાર" અને કસ્ટમ કી-વેલ્યુ જોડી જેવા વિશેષતાઓને સ્પષ્ટ કરવાની મંજૂરી આપે છે. |
BoolVariation() | પ્રદાન કરેલ સંદર્ભના આધારે લક્ષણ ધ્વજનું બુલિયન મૂલ્ય મેળવે છે. આ આદેશ પરીક્ષણો દરમિયાન યોગ્ય ધ્વજ મૂલ્યાંકન સુનિશ્ચિત કરે છે. |
testData.updateFlag() | JavaScript ઉદાહરણમાં, આ ફ્લેગ રૂપરેખાંકનને ચોક્કસ ભિન્નતાઓ અને લક્ષ્યો સાથે ગતિશીલ રીતે અપડેટ કરે છે, અનુરૂપ પરીક્ષણને સક્ષમ કરે છે. |
SetAnonymous() | સંદર્ભ નિર્માણ દરમિયાન સંદર્ભને અનામી તરીકે ચિહ્નિત કરે છે. આ એવા કિસ્સાઓ માટે ઉપયોગી છે જ્યાં વપરાશકર્તાની ઓળખ ફ્લેગ મૂલ્યાંકનને પ્રભાવિત ન કરવી જોઈએ. |
WithTransactionContext() | મૂલ્યાંકન સંદર્ભને પિતૃ સંદર્ભ સાથે જોડે છે. તે ખાતરી કરે છે કે ધ્વજ મૂલ્યાંકન દરમિયાન બંને સંદર્ભોનું એકસાથે મૂલ્યાંકન કરવામાં આવે છે. |
init() | Node.js માં LaunchDarkly SDK ક્લાયંટને પ્રારંભ કરે છે, તેને ફ્લેગ ગોઠવણી અને મૂલ્યાંકન સેવાઓ સાથે ક્રિયાપ્રતિક્રિયા કરવા માટે તૈયાર કરે છે. |
સંદર્ભ-વિશિષ્ટ ધ્વજ પરીક્ષણના મિકેનિક્સનું અનાવરણ
ઉપરના ઉદાહરણમાં, પ્રથમ સ્ક્રિપ્ટ એ Go માં એક બેકએન્ડ અમલીકરણ છે જે દરમિયાન LaunchDarkly ફ્લેગ મૂલ્યાંકનને હેન્ડલ કરવા માટે રચાયેલ છે. એકમ પરીક્ષણ. હેતુ ગતિશીલ વપરાશકર્તા સંદર્ભો પર આધારિત વિવિધ ફ્લેગ વર્તણૂકોનું અનુકરણ કરવાનો છે, જે અલગતામાં વિવિધ દૃશ્યોનું પરીક્ષણ કરવાનું શક્ય બનાવે છે. સ્ક્રિપ્ટની શરૂઆત `ldtestdata.DataSource()` આદેશનો ઉપયોગ કરીને ટેસ્ટ ડેટા સ્ત્રોત બનાવીને થાય છે, જે અમને પ્રોગ્રામેટિકલી ફીચર ફ્લેગ સેટિંગ્સને વ્યાખ્યાયિત અને સંશોધિત કરવાની મંજૂરી આપે છે. આ ખાતરી કરે છે કે પરીક્ષણ વાતાવરણ વાસ્તવિક-વિશ્વ રૂપરેખાંકનોની નકલ કરવા માટે તૈયાર કરી શકાય છે. 📊
સ્ટેન્ડઆઉટ આદેશો પૈકી એક છે `VariationForKey()`, જે વપરાશકર્તાની વિશેષતાઓમાં વિશિષ્ટ ફ્લેગ ભિન્નતાઓને મેપ કરે છે. અમારા કિસ્સામાં, અમે તેનો ઉપયોગ ખાતરી કરવા માટે કરીએ છીએ કે ફ્લેગનું મૂલ્યાંકન "અક્ષમ-ધ્વજ" એટ્રિબ્યુટ ધરાવતા વપરાશકર્તાઓ માટે `સત્ય` પર સેટ કરેલું છે, જ્યારે અન્ય લોકો માટે `ફલથ્રુ વેરિએશન()`નો ઉપયોગ કરીને `સત્ય` પર ડિફોલ્ટ કરે છે. આ સેટઅપ એક વ્યવહારુ દૃશ્યને પ્રતિબિંબિત કરે છે જ્યાં બીટા સુવિધાઓ અમુક વપરાશકર્તાઓ માટે અક્ષમ હોય છે પરંતુ બાકીની વસ્તી માટે સક્ષમ હોય છે. આ આદેશોને જોડીને, અમે પરીક્ષણોમાં વાસ્તવિક લક્ષણ ફ્લેગ વર્તનનું અનુકરણ કરવા માટે એક મજબૂત પદ્ધતિ બનાવીએ છીએ.
બીજી સ્ક્રિપ્ટ, Node.js માં લખાયેલી, LaunchDarkly SDK નો ઉપયોગ કરીને ફ્રન્ટએન્ડ અથવા મિડલવેર એપ્લિકેશન પર ધ્યાન કેન્દ્રિત કરે છે. તે વિવિધતાઓ અને લક્ષ્યીકરણ નિયમો સાથે ફ્લેગોને ગતિશીલ રીતે ગોઠવવા માટે `testData.updateFlag()` આદેશનો ઉપયોગ કરે છે. ઉદાહરણ તરીકે, અમે ફ્લેગ મૂલ્યાંકનની વર્તણૂકને બદલવા માટે "અક્ષમ-ધ્વજ" જેવા વિશિષ્ટ કસ્ટમ લક્ષણો સાથે વપરાશકર્તાઓને લક્ષ્ય બનાવીએ છીએ. આ ગતિશીલ રૂપરેખાંકન ખાસ કરીને એવા વાતાવરણમાં ઉપયોગી છે જ્યાં સુવિધા ટૉગલ્સને વારંવાર અપડેટ કરવામાં આવે છે અથવા વિવિધ દૃશ્યો હેઠળ પરીક્ષણ કરવાની જરૂર છે. ફીચર રોલઆઉટ દરમિયાન સીમલેસ યુઝર અનુભવો સુનિશ્ચિત કરવા માટે આ અત્યંત અસરકારક છે. 🚀
બંને સ્ક્રિપ્ટો ઉપયોગ કરવાના નિર્ણાયક મહત્વને દર્શાવે છે સંદર્ભ-આધારિત ધ્વજ મૂલ્યાંકન. ગો અમલીકરણ શક્તિશાળી ડેટા સ્ત્રોત મેનીપ્યુલેશન સાથે સર્વર-સાઇડ નિયંત્રણ દર્શાવે છે, જ્યારે Node.js ઉદાહરણ ક્લાયન્ટ બાજુ પર ગતિશીલ ફ્લેગ અપડેટ્સને હાઇલાઇટ કરે છે. એકસાથે, આ અભિગમો LaunchDarkly ફ્લેગ્સ દ્વારા ટૉગલ કરેલા પરીક્ષણ સુવિધાઓ માટે એક વ્યાપક ઉકેલ પૂરો પાડે છે. ભલે તમે પ્રાયોગિક સુવિધાઓને રોલ આઉટ કરતા વિકાસકર્તા હો અથવા જટિલ દૃશ્યોને ડિબગ કરતા હો, આ સ્ક્રિપ્ટો વિશ્વસનીય અને સંદર્ભ-જાગૃત પરીક્ષણ વર્કફ્લો માટે પાયા તરીકે સેવા આપે છે. 💡
એકમ પરીક્ષણ માટે સંદર્ભિત ધ્વજ મૂલ્યાંકન
આ સ્ક્રિપ્ટ Go નો ઉપયોગ કરીને બેકએન્ડ સોલ્યુશન દર્શાવે છે, વિવિધ ટેસ્ટ કેસો માટે વિશિષ્ટ ફ્લેગ ભિન્નતાઓને ગોઠવવા માટે LaunchDarkly SDK નો લાભ લે છે.
package main
import (
"context"
"fmt"
"time"
ld "github.com/launchdarkly/go-server-sdk/v7"
"github.com/launchdarkly/go-server-sdk/v7/ldcomponents"
"github.com/launchdarkly/go-server-sdk/v7/testhelpers/ldtestdata"
)
// Create a test data source and client
func NewTestClient() (*ldtestdata.TestDataSource, *ld.LDClient, error) {
td := ldtestdata.DataSource()
config := ld.Config{
DataSource: td,
Events: ldcomponents.NoEvents(),
}
client, err := ld.MakeCustomClient("test-sdk-key", config, 5*time.Second)
if err != nil {
return nil, nil, err
}
return td, client, nil
}
// Configure the test flag with variations
func ConfigureFlag(td *ldtestdata.TestDataSource) {
td.Update(td.Flag("feature-flag")
.BooleanFlag()
.VariationForKey("user", "disable-flag", false)
.FallthroughVariation(true))
}
// Simulate evaluation based on context
func EvaluateFlag(client *ld.LDClient, context map[string]interface{}) bool {
evalContext := ld.ContextBuild(context["kind"].(string)).SetAnonymous(true).Build()
value, err := client.BoolVariation("feature-flag", evalContext, false)
if err != nil {
fmt.Println("Error evaluating flag:", err)
return false
}
return value
}
func main() {
td, client, err := NewTestClient()
if err != nil {
fmt.Println("Error creating client:", err)
return
}
defer client.Close()
ConfigureFlag(td)
testContext := map[string]interface{}{
"kind": "user",
"disable-flag": true,
}
result := EvaluateFlag(client, testContext)
fmt.Println("Feature flag evaluation result:", result)
}
યુનિટ ટેસ્ટમાં લોંચ ડાર્કલી ફ્લેગ્સનું ફ્રન્ટએન્ડ હેન્ડલિંગ
આ સ્ક્રિપ્ટ ગતિશીલ સંદર્ભ મૂલ્યો સાથે લક્ષણ ફ્લેગ મૂલ્યાંકનનું અનુકરણ કરવા માટે JavaScript/Node.js અમલીકરણ બતાવે છે.
const LaunchDarkly = require('launchdarkly-node-server-sdk');
async function setupClient() {
const client = LaunchDarkly.init('test-sdk-key');
await client.waitForInitialization();
return client;
}
async function configureFlag(client) {
const data = client.testData();
data.updateFlag('feature-flag', {
variations: [true, false],
fallthrough: { variation: 0 },
targets: [
{ variation: 1, values: ['disable-flag'] }
]
});
}
async function evaluateFlag(client, context) {
const value = await client.variation('feature-flag', context, false);
console.log('Flag evaluation result:', value);
return value;
}
async function main() {
const client = await setupClient();
await configureFlag(client);
const testContext = {
key: 'user-123',
custom: { 'disable-flag': true }
};
await evaluateFlag(client, testContext);
client.close();
}
main().catch(console.error);
અદ્યતન સંદર્ભ રૂપરેખાંકનો સાથે લોન્ચ ડાર્કલી પરીક્ષણને વધારવું
LaunchDarkly માં ફીચર ફ્લેગ્સ સાથે કામ કરતી વખતે, એડવાન્સ્ડ સંદર્ભ રૂપરેખાંકનો તમારા પરીક્ષણની ચોકસાઈને નોંધપાત્ર રીતે સુધારી શકે છે. જ્યારે ટૉગલિંગ ફ્લેગ્સની મૂળભૂત કાર્યક્ષમતા સીધી છે, વાસ્તવિક-વિશ્વ એપ્લિકેશનો ઘણીવાર વપરાશકર્તા વિશેષતાઓ અથવા પર્યાવરણીય પરિબળોના આધારે સૂક્ષ્મ મૂલ્યાંકનની માંગ કરે છે. ઉદાહરણ તરીકે, તમારે વિશિષ્ટ વપરાશકર્તા જૂથો માટે સુવિધાને અક્ષમ કરવાની જરૂર પડી શકે છે, જેમ કે "આંતરિક પરીક્ષકો", જ્યારે તેને બીજા બધા માટે જીવંત રાખે છે. આને મજબૂત સંદર્ભો બનાવવાની જરૂર છે જે ગતિશીલ રીતે બહુવિધ લક્ષણો માટે જવાબદાર છે. 🚀
LaunchDarkly નું એક અવગણેલું પરંતુ શક્તિશાળી પાસું એ છે કે વપરાશકર્તા, ઉપકરણ અથવા એપ્લિકેશન જેવા બહુવિધ સંદર્ભ પ્રકારો માટે તેનું સમર્થન છે. આ સુવિધાનો લાભ લેવાથી તમે વાસ્તવિક-વિશ્વના દૃશ્યોનું અનુકરણ કરી શકો છો, જેમ કે વપરાશકર્તા એકાઉન્ટ્સ અને અનામી સત્રો વચ્ચેનો તફાવત. એકમ પરીક્ષણોમાં, તમે આ વિગતવાર સંદર્ભો જેવા સાધનોનો ઉપયોગ કરીને પાસ કરી શકો છો NewEvaluationContext, જે તમને એજ-કેસ પરીક્ષણ માટે "અનામી: સાચું" અથવા કસ્ટમ ફ્લેગ્સ જેવા લક્ષણોનો ઉલ્લેખ કરવા દે છે. આ રૂપરેખાંકનો ઉત્પાદનમાં કોઈ અણધારી વર્તણૂકને સુનિશ્ચિત કરીને તમારા પરીક્ષણો પર સરસ નિયંત્રણ સક્ષમ કરે છે.
અન્ય અદ્યતન લક્ષણ સંયોજન નિયમોનો ઉપયોગ કરીને ફ્લેગ લક્ષ્યીકરણ છે. ઉદાહરણ તરીકે, સંયોજન દ્વારા બુલિયન ધ્વજ સાથે VariationForKey, તમે અત્યંત વિશિષ્ટ નિયમો બનાવી શકો છો જે અનન્ય સંદર્ભોને પૂર્ણ કરે છે, જેમ કે માત્ર ચોક્કસ પ્રદેશના વપરાશકર્તાઓ માટે પરીક્ષણ અથવા પ્રીમિયમ સભ્યો તરીકે ફ્લેગ કરેલા વપરાશકર્તાઓ. આ સુનિશ્ચિત કરે છે કે તમારા એકમ પરીક્ષણો અસરકારક રીતે જટિલ ક્રિયાપ્રતિક્રિયાઓનું અનુકરણ કરી શકે છે. આ વ્યૂહરચનાઓને તમારા વર્કફ્લોમાં એકીકૃત કરવાથી માત્ર વિશ્વસનીયતા જ નહીં પરંતુ જમાવટ દરમિયાન ભૂલો પણ ઓછી થાય છે, જે તમારી પરીક્ષણ પ્રક્રિયાને વધુ મજબૂત અને કાર્યક્ષમ બનાવે છે. 🌟
સંદર્ભ-આધારિત પરીક્ષણમાં નિપુણતા: વારંવાર પૂછાતા પ્રશ્નો
- LaunchDarkly સંદર્ભ શું છે?
- LaunchDarkly સંદર્ભ એ એન્ટિટી વિશે મેટાડેટા રજૂ કરે છે કે જેના માટે ફ્લેગનું મૂલ્યાંકન કરવામાં આવે છે, જેમ કે વપરાશકર્તા અથવા ઉપકરણ વિશેષતાઓ. ઉપયોગ કરો NewEvaluationContext પરીક્ષણોમાં આ ડેટાને ગતિશીલ રીતે વ્યાખ્યાયિત કરવા માટે.
- હું એક ધ્વજ માટે વિવિધ ભિન્નતા કેવી રીતે સેટ કરી શકું?
- તમે ઉપયોગ કરી શકો છો VariationForKey સંદર્ભ લક્ષણોના આધારે ચોક્કસ પરિણામોને વ્યાખ્યાયિત કરવા. ઉદાહરણ તરીકે, "અક્ષમ-ધ્વજ: સાચું" સેટ કરવાથી તે વિશેષતા માટે `false` પરત આવશે.
- શું હું એકસાથે બહુવિધ સંદર્ભો ચકાસી શકું?
- હા, LaunchDarkly બહુ-સંદર્ભ પરીક્ષણને સપોર્ટ કરે છે. ઉપયોગ કરો SetAnonymous વિવિધ વપરાશકર્તા સત્રોનું અનુકરણ કરવા માટે કસ્ટમ લક્ષણોની સાથે, જેમ કે અનામી વપરાશકર્તાઓ વિરુદ્ધ લૉગ-ઇન વપરાશકર્તાઓ.
- ધ્વજ લક્ષ્યીકરણમાં સંયોજન નિયમો શું છે?
- સંયોજન નિયમો બહુવિધ શરતોને સંયોજિત કરવાની મંજૂરી આપે છે, જેમ કે વપરાશકર્તા ચોક્કસ સ્થાને હોય અને પ્રીમિયમ ખાતું હોય. ઉપયોગ કરો BooleanFlag અને અદ્યતન દૃશ્યો માટે શરતી લક્ષ્યીકરણ.
- હું પરીક્ષણોમાં ફોલબેક વિવિધતાઓને કેવી રીતે હેન્ડલ કરી શકું?
- ઉપયોગ કરો FallthroughVariation જ્યારે કોઈ ચોક્કસ લક્ષ્યીકરણ નિયમ મેળ ખાતો નથી ત્યારે ડિફૉલ્ટ વર્તનને વ્યાખ્યાયિત કરવા માટે. આ ધાર કેસોમાં અનુમાનિત ધ્વજ મૂલ્યાંકનને સુનિશ્ચિત કરે છે.
રિફાઇનિંગ ફ્લેગ-આધારિત પરીક્ષણ વ્યૂહરચનાઓ
એકમ પરીક્ષણો માટે લોન્ચ ડાર્કલી ફ્લેગ્સને ગોઠવવું એ એક પડકાર અને તક બંને છે. ચોક્કસ સંદર્ભોની રચના કરીને, વિકાસકર્તાઓ વિવિધ વપરાશકર્તા દૃશ્યો માટે મજબૂત અને ફરીથી વાપરી શકાય તેવા પરીક્ષણો બનાવી શકે છે. આ પ્રક્રિયા ખાતરી કરે છે કે સુવિધાઓ વિશ્વસનીય રીતે સક્ષમ અથવા અક્ષમ છે, જીવંત વાતાવરણમાં સંભવિત ભૂલોને ઘટાડે છે. 🌟
જેવા અદ્યતન સાધનો બુલિયન ધ્વજ અને વેરિયેશન ફોર કી પરીક્ષણોને વધુ ગતિશીલ અને અસરકારક બનાવીને, સૂક્ષ્મ વર્તણૂકોને વ્યાખ્યાયિત કરવા ટીમોને સશક્ત બનાવે છે. સંરચિત અભિગમ સાથે, તમે ખાતરી કરી શકો છો કે તમારા પરીક્ષણો વાસ્તવિક-વિશ્વના ઉપયોગના કેસોને પ્રતિબિંબિત કરે છે, તમારા કોડબેઝને મજબૂત બનાવે છે અને વપરાશકર્તા સંતોષને વધારે છે.
સ્ત્રોતો અને સંદર્ભો
- LaunchDarkly Go SDK અને તેના ઉપયોગ વિશેની વિગતો અહીં મળી શકે છે ડાર્કલી ગો એસડીકે લોંચ કરો .
- ફીચર ફ્લેગ મેનેજમેન્ટ માટે OpenFeature SDK નો ઉપયોગ કરવાની માહિતી અહીં ઉપલબ્ધ છે ઓપનફીચર ઓફિશિયલ ડોક્યુમેન્ટેશન .
- LaunchDarkly માટે ટેસ્ટ ડેટા સ્ત્રોતો સેટ કરવા વિશે વધુ જાણો ડાર્કલી ટેસ્ટ ડેટા સ્ત્રોતો લોંચ કરો .
- પ્રેક્ટિકલ ઉદાહરણો સાથે અદ્યતન સુવિધા ફ્લેગ મેનેજમેન્ટ વ્યૂહરચનાઓનું અન્વેષણ કરો ફીચર ટોગલ પર માર્ટિન ફાઉલરનો લેખ .